Showing preview only (5,826K chars total). Download the full file or copy to clipboard to get everything.
Repository: intel/depth-camera-web-demo
Branch: master
Commit: 4bca725c901e
Files: 30
Total size: 5.6 MB
Directory structure:
gitextract_lz9578_u/
├── DEVELOPMENT.md
├── LICENSE.md
├── README.md
├── depth-camera.js
├── depth-to-color-sync-render.js
├── depthdemo.html
├── gesture/
│ ├── depth_and_segments.js
│ ├── index.html
│ └── indexaframe.html
├── index.html
├── libs/
│ ├── aframe/
│ │ ├── LICENSE.txt
│ │ └── aframe-v0.7.1.js
│ ├── ammo.js/
│ │ ├── LICENSE
│ │ └── ammo.js
│ ├── gl-matrix.js
│ └── picogl.js/
│ ├── picogl.js
│ └── utils.js
├── nn/
│ └── using-deeplab/
│ ├── README.md
│ ├── argmax257_2/
│ │ ├── LICENSE
│ │ ├── group1-shard1of2
│ │ ├── group1-shard2of2
│ │ ├── tensorflowjs_model.pb
│ │ └── weights_manifest.json
│ ├── index.html
│ └── tfjs/
│ ├── LICENSE
│ └── tf-core.js
├── tools/
│ └── generate_concentric_circles_indices.js
└── typing_in_the_air/
├── doc/
│ └── tutorial.html
├── front_capture_typing.html
└── front_capture_typing.js
================================================
FILE CONTENTS
================================================
================================================
FILE: DEVELOPMENT.md
================================================
### How to specify calibration parameters for RealSense cameras
After exploring possibility to implement JavaScript API that would fetch calibration parameters from camera ([link to outdated specification for the reference](https://www.w3.org/TR/2017/WD-mediacapture-depth-20170328/)), that approach got abandoned calibration parameters are instead, specified in JavaScript code here, in [depth-camera.js](https://github.com/01org/depth-camera-web-demo/blob/926fd23c535e3a5a07fcfb94bf9afea0e31a9dc4/depth-camera.js#L149) file. Given that all RealSense cameras of the same model are factory calibrated to the same values and that firmware update (so far) doesn't change calibration parameters, specifying constant values in depth-camera.js and lookup based on camera label worked fine,... so far.
The section here explains where from, and how to, add numerical values to depth-camera.js file. This work is required for new camera models or if you want to support depth or color stream track resolutions that are not yet specified in depth-camera.js.
We would need [rs-enumerate-devices](https://github.com/IntelRealSense/librealsense/tree/master/tools/enumerate-devices) tool. It is part of RealSense SDK. Install SDK binary [binary or build it from source code](https://github.com/IntelRealSense/librealsense/). Connect the camera and run ```rs-enumerate-devices -c``` to get the calibration data printed out to terminal. Copy values from there to [depth-camera.js](https://github.com/01org/depth-camera-web-demo/blob/926fd23c535e3a5a07fcfb94bf9afea0e31a9dc4/depth-camera.js#L274) following the example:
```
} else if (cameraName === "SR300") {
result = {
```
Run `rs-enumerate-devices -o` - depthScale value is in a row containing `Depth Units` label.
```
depthScale: 0.0001249866472790017724,
```
Provide depth intrinstics for resolutions you plan to use. `rs-enumerate-devices -c` prints out this:
```
Intrinsic of "Depth" 640x480 Z16
Width: 640
Height: 480
PPX: 307.147125244141
PPY: 245.624420166016
Fx: 474.499542236328
Fy: 474.499420166016
Distortion: Inverse Brown Conrady
Coeffs: 0.126395508646965 0.0701233819127083 0.00355594046413898 0.00548861175775528 0.103697031736374
```
From the output, we just copy values to `getDepthIntrinsics` and `depthDistortionModel` below. `getColorIntrinsics`data is populated following the same pattern - note that there multiple resolutions (Intrinsic of "Color" 640x480, Intrinsic of "Color" 1280x720, ...) supported with different constants to be copied from `rs-enumerate-devices -c` output.
```
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [307.147125244141, 245.624420166016],
focalLength: [474.499542236328, 474.499420166016],
};
} else {
throwUnsupportedSizeError();
}
},
getColorIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [305.502166748047, 247.462982177734],
focalLength: [618.239440917969, 618.239562988281],
};
} else if (width == 1280 && height == 720) {
return {
offset: [618.253234863281, 371.194458007812],
focalLength: [927.359130859375, 927.359313964844],
};
} else if (width == 1920 && height == 1080) {
return {
offset: [927.3798828125, 556.791687011719],
focalLength: [1391.03869628906, 1391.03894042969],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[305.502166748047, 247.462982177734]
),
colorFocalLength: new Float32Array(
[618.239440917969, 618.239562988281]
),
```
depthToColor values are copied from `rs-enumerate-devices -c` `Extrinsic from "Depth" To "Color"` section.
```
Extrinsic from "Depth" To "Color" :
Rotation Matrix:
0.99999 0.0034401 -0.0016265
-0.003436 0.99999 0.0024992
0.0016351 -0.0024936 1
Translation Vector: 0.0256999991834164 0.00126673700287938 0.00358582031913102
```
Note how the command output is column major compared to depthToColor layout below - three elements of the first printed row are the first three depthToColor column elements. We have patched [this line in rs-enumerate-devices](https://github.com/IntelRealSense/librealsense/blob/d0f0e5e5238ad8c729957c1d82297452c32e8d72/tools/enumerate-devices/rs-enumerate-devices.cpp#L26) to obtain higher precision values.
The fourth row of depthToColor matrix is populated from `Translation Vector`values.
```
depthToColor: [
0.999992787837982, -0.00343602383509278, 0.00163511745631695, 0,
0.00344009511172771, 0.999990999698639, -0.00249356147833169, 0,
-0.00162653462029994, 0.00249916850589216, 0.999995589256287, 0,
0.0256999991834164, 0.00126673700287938, 0.00358582031913102, 1
],
colorToDepth: [
0.999992787837982, -0.00343602383509278, 0.00163511745631695, 0,
0.00344009511172771, 0.999990999698639, -0.00249356147833169, 0,
-0.00162653462029994, 0.00249916850589216, 0.999995589256287, 0,
-0.0257013235241175, -0.00134619453456253, -0.00354716833680868, 1
],
depthDistortionModel: DistortionModel.INVERSE_BROWN_CONRADY,
depthDistortioncoeffs: [
0.126395508646965,
0.0701233819127083,
0.00355594046413898,
0.00548861175775528,
0.103697031736374,
],
colorDistortionModel: DistortionModel.NONE,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
}
```
================================================
FILE: LICENSE.md
================================================
# License
Everything in this repo is BSD style license unless otherwise specified.
Copyright (c) 2016 Intel Corporation. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* 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.
* Neither the name of Intel Corporation nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
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.
================================================
FILE: README.md
================================================
DISCONTINUATION OF PROJECT
This project will no longer be maintained by Intel.
Intel has ceased development and contributions including, but not limited to, maintenance, bug fixes, new releases, or updates, to this project.
Intel no longer accepts patches to this project.
If you have an ongoing need to use this project, are interested in independently developing it, or would like to maintain patches for the open source software community, please create your own fork of this project.
Contact: webadmin@linux.intel.com
# Depth camera capture in HTML5
<table cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: none;">
<tr>
<td align="center" valign="center">
<img src="gesture/joggling.gif" alt="Video is not yet loaded." style="width:580px;"/>
<br />
</td>
<td align="center" valign="center">
<img src="gesture/hands_interaction.gif" alt="hands_interaction.gif is not yet loaded." style="width:556px;"/>
<br />
</td>
</tr>
<tr>
<td align="center" valign="center" colspan="2">
</br><p>Moving boxes using hands (or a paper) demo shows live depth captured mesh interaction with scene objects; combining 3D world and depth captured hands (or other objects) rendering and Bullet Physics. <a href="https://intel.github.io/depth-camera-web-demo/gesture/index.html">Run live demo</a>.</br></br>
</p>
</td>
</tr>
<tr>
</tr>
<tr>
<td align="center" valign="center">
<img src="backgroundremoval.gif" alt="backgroundremoval.gif is not yet loaded."/>
<br />
<p>Simple background removal implemented as flood-fill of background color to similarly colored pixels. Works only with simple backgrounds - e.g. room walls on the demo gif. Check the <a href="https://01.org/node/28902">tutorial article</a> and <a href="https://intel.github.io/depth-camera-web-demo/depthdemo.html">run live demo</a>.</p>
</td>
<td align="center" valign="center">
<img src="typing_in_the_air/typing_in_the_air.gif" alt="typing_in_the_air.gif is not yet loaded."/>
<br />
<p>Typing in the air tutorial shows how to use depth stream and WebGL transform feedback to do simple gesture recognition. Check the <a href="https://software.intel.com/en-us/blogs/2017/06/22/tutorial-typing-in-the-air-using-depth-camera-chrome-javascript-and-webgl-transform">tutorial article</a> and <a href="https://intel.github.io/depth-camera-web-demo/typing_in_the_air/front_capture_typing.html">run live demo</a>.</p>
</td>
</tr>
<tr>
<td align="center" valign="center">
<img src="https://github.com/01org/depthcamera-pointcloud-web-demo/raw/master/recording.gif" alt="https://github.com/01org/depthcamera-pointcloud-web-demo/raw/master/recording.gif is not yet loaded." style="width:362px;"/>
<br />
<p>3D point cloud rendering demo shows how to render and synchronize depth and color video on GPU. Check the <a href="https://01.org/node/10446">tutorial article</a> and <a href="https://intel.github.io/depthcamera-pointcloud-web-demo/">run live demo</a>.</p>
</td>
<td align="center" valign="center">
<img src="how_the_demo_looks.gif" alt="how_the_demo_looks.gif is not yet loaded." style="height:400px;width:452px;"/>
<br />
<p>HTML5 Depth Capture tutorial shows how to access depth stream, check the <a href="https://01.org/node/5101">tutorial article</a> and <a href="https://intel.github.io/depth-camera-web-demo/depthdemo.html">run live demo</a>.</p>
</td>
</tr>
</table>
To capture and manipulate depth camera stream in HTML5, you'll need:
* Chrome browser version 62 or later (the official release and no need for additional extensions),
* Intel® RealSense™ 3D camera plugged to USB 3.0 port
* SR300 (and related cameras like Razer Stargazer or Creative BlasterX
Senz3D) or R200,
* Windows, Linux or ChromeOS PC.
These are the constraints of current implementation. The plan is to support other depth cameras and OSX and Android, too.
## Articles related to the demos:
* [Depth Camera Capture in HTML5](https://01.org/node/5101),
* [Typing in the air using depth camera, Chrome, JavaScript, and WebGL transform feedback](https://software.intel.com/en-us/blogs/2017/06/22/tutorial-typing-in-the-air-using-depth-camera-chrome-javascript-and-webgl-transform)
* [AR marker detection on GPU using WebGL](https://01.org/node/26012)
* [Background removal with Intel® RealSense™ Depth Camera, WebRTC*, and WebGL*](https://01.org/node/28902)
* [Background removal using TensorFlow.js](https://01.org/node/29971)
================================================
FILE: depth-camera.js
================================================
/*jshint esversion: 6 */
// Copyright 2017 Intel Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
class DepthCamera {
constructor() {
}
static async getDepthStream() {
if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices ||
!navigator.mediaDevices.getUserMedia) {
throw new Error("Your browser doesn't support the required mediaDevices APIs.");
}
// Use videoKind if it is supported. At the moment it is experimental; to
// use it. Chrome needs to be started with command line argument:
// --enable-blink-features=MediaCaptureDepthVideoKind
const supported_constraints = navigator.mediaDevices.getSupportedConstraints();
if (supported_constraints.videoKind) {
let stream = await navigator.mediaDevices.getUserMedia({
video: {
videoKind: {exact: "depth"},
frameRate: {exact: 60}
}
});
const track = stream.getVideoTracks()[0];
let settings = track.getSettings ? track.getSettings() : null;
// TODO: following is a browser bug if happening.
if (settings.videoKind != "depth")
throw new Error("No RealSense depth camera connected.");
return stream;
}
// We cannot use videoKind yet, so try to make a constraint that would
// most likely resolve to a depth camera. Later, we use camera label to
// check if we really got a depth track.
const constraints = {
audio: false,
video: {
// videoKind: {exact: "depth"}, R200 related hack: prefer
// depth (width = 628) to IR (width = 641) stream.
width: {ideal: 628},
// SR300 depth camera enables capture at 110 frames per second.
frameRate: {ideal: 110},
}
}
let stream = await navigator.mediaDevices.getUserMedia(constraints);
let track = stream.getVideoTracks()[0];
if (track.label.indexOf("RealSense") == -1) {
throw new Error(chromeVersion() < 58 ?
"Your browser version is too old. Get Chrome version 58 or later." :
"No RealSense camera connected.");
}
if (track.getSettings && track.getSettings().frameRate > 60) {
// After Chrome 59, returned track is scaled to 628 and frameCount 110.
// We got the deviceId, so we the deviceId to select the stream with
// default resolution and frameRate.
track.stop();
const constraints = {
audio: false,
video: {
deviceId: {exact: track.getSettings().deviceId},
frameRate: {exact: 60}
}
}
stream = await navigator.mediaDevices.getUserMedia(constraints);
}
return stream;
}
// Call the method after getting depth_stream using getDepthStream.
static async getColorStreamForDepthStream(depthStream, w = 640, h = 480) {
// To get color stream from the same physical device providing the depth
// stream, we will use groupId, once it is implemented:
// See https://crbug.com/627793
// For now, enumerate devices based on label.
// Note: depth_stream is not used, for now, but deliberately added as a
// parameter to mandate the need for previous call to getDepthStream.
let depth_device_id = null;
const depth = depthStream.getVideoTracks()[0];
// Chrome, starting with version 59, implements getSettings() API.
if (depth.getSettings) {
depth_device_id = depth.getSettings().deviceId;
} else if (idealWidth) {
console.warn(`Not able to set ideal width for color video as
MediaStreamTrack getSettings() API is not available. Try
with Chromium version > 59.`);
}
var all_devices = await navigator.mediaDevices.enumerateDevices();
let devices = all_devices.filter((device) => (
device.kind == 'videoinput' &&
device.label.includes('RealSense') &&
device.label.includes('RGB') &&
(device.label != depth.label ||
device.deviceId != depth_device_id)));
if (devices.length < 1) {
throw new Error("No RealSense camera connected.");
} else if (devices.length > 1) {
devices = devices.sort((a, b) => {
// Heuristics, as everything else in this method: pick camera with
// 'RGB' at the end
return b.label.lastIndexOf('RGB') - a.label.lastIndexOf('RGB');
});
}
// Select stream the id, so that some other camera doesn't get selected
// (e.g. if the user has another rgb camera).
const id = devices[0].deviceId;
// Select color stream.
const constraints = {
video: {
width: w,
height: h,
deviceId: {exact: id},
}
};
return navigator.mediaDevices.getUserMedia(constraints);
}
// Figure out the camera intristics and extrinsics based on the depth stream
// camera model.
//
// This should be rewritten once the MediaCapture-Depth API works - don't
// hardcode the values based on camera model, but query it from the API.
//
// See the documentation at
// https://w3c.github.io/mediacapture-depth/#synchronizing-depth-and-color-video-rendering
static getCameraCalibration(depth_stream) {
const label = depth_stream.getVideoTracks()[0].label;
const cameraName = label.includes("R200") ? "R200"
: (label.includes("Camera S") || label.includes("SR300")) ? "SR300"
: label.includes("ZR300") ? "ZR300"
: label.includes("415") ? "D415"
: label.includes("430") ? "D435"
: label.includes("435i") ? "D435i"
: label.includes("435") ? "D435"
: label.includes(") 4") ? "generic4"
: label;
const DistortionModel = {
NONE: 0,
MODIFIED_BROWN_CONRADY: 1,
INVERSE_BROWN_CONRADY: 2,
};
function throwUnsupportedSizeError() {
const error = new Error("Depth intrinsics for size " + width + "x" +
height + " are not available.");
error.name = "UnsupportedSizeError";
throw error;
}
let result;
if (cameraName === "R200") {
result = {
depthScale: 0.001,
getDepthIntrinsics: function(width, height) {
if (width == 628 && height == 469) {
return {
offset: [305.558075, 233.5],
focalLength: [582.154968, 582.154968],
};
} else if (width == 628 && height == 361) {
return {
offset: [233.3975067138671875, 179.2618865966796875],
focalLength: [447.320953369140625, 447.320953369140625],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[311.841033935546875, 229.7513275146484375]
),
colorFocalLength: new Float32Array(
[627.9630126953125, 634.02410888671875]
),
// Rotation [0..2] goes to 1st column, [3..6] to second, etc. The
// row at the bottom is translation.
depthToColor: [
0.99998325109481811523, 0.002231199527159333229, 0.00533978315070271492, 0,
-0.0021383403800427913666, 0.99984747171401977539, -0.017333013936877250671, 0,
-0.0053776423446834087372, 0.017321307212114334106, 0.99983555078506469727, 0,
-0.058898702263832092285, -0.00020283895719330757856, -0.0001998419174924492836, 1
],
depthDistortionModel: DistortionModel.NONE,
depthDistortioncoeffs: [0, 0, 0, 0, 0],
colorDistortionModel: DistortionModel.MODIFIED_BROWN_CONRADY,
colorDistortioncoeffs: [
-0.078357703983783721924,
0.041351985186338424683,
-0.00025565386749804019928,
0.0012357287341728806496,
0
],
};
} else if (cameraName === "SR300 Senz3D") {
result = {
depthScale: 0.0001249866472790017724,
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [310.743988037109375, 245.1811676025390625],
focalLength: [475.900726318359375, 475.900726318359375],
};
} else {
throwUnsupportedSizeError();
}
},
getColorIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [312.073974609375, 241.969329833984375],
focalLength: [617.65087890625, 617.65093994140625],
};
} else if (width == 1280 && height == 720) {
return {
offset: [628.110961914062, 362.953979492188],
focalLength: [926.476318359375, 926.476440429688],
};
} else if (width == 1920 && height == 1080) {
return {
offset: [942.166442871094, 544.430969238281],
focalLength: [1389.71447753906, 1389.71472167969],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[312.073974609375, 241.969329833984375]
),
colorFocalLength: new Float32Array(
[617.65087890625, 617.65093994140625]
),
depthToColor: [
0.99998641014099121094, -0.0051436689682304859161, 0.00084982655243948101997, 0,
0.0051483912393450737, 0.99997079372406005859, -0.005651625804603099823, 0,
-0.00082073162775486707687, 0.0056559243239462375641, 0.99998366832733154297, 0,
0.025699997320771217346, -0.00073326355777680873871, 0.0039400043897330760956, 1
],
depthDistortionModel: DistortionModel.INVERSE_BROWN_CONRADY,
depthDistortioncoeffs: [
0.14655706286430358887,
0.078352205455303192139,
0.0026113723870366811752,
0.0029218809213489294052,
0.066788062453269958496,
],
colorDistortionModel: DistortionModel.NONE,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
} else if (cameraName === "SR300") {
result = {
depthScale: 0.0001249866472790017724,
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [307.147125244141, 245.624420166016],
focalLength: [474.499542236328, 474.499420166016],
};
} else {
throwUnsupportedSizeError();
}
},
getColorIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [305.502166748047, 247.462982177734],
focalLength: [618.239440917969, 618.239562988281],
};
} else if (width == 1280 && height == 720) {
return {
offset: [618.253234863281, 371.194458007812],
focalLength: [927.359130859375, 927.359313964844],
};
} else if (width == 1920 && height == 1080) {
return {
offset: [927.3798828125, 556.791687011719],
focalLength: [1391.03869628906, 1391.03894042969],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[305.502166748047, 247.462982177734]
),
colorFocalLength: new Float32Array(
[618.239440917969, 618.239562988281]
),
depthToColor: [
0.999992787837982, -0.00343602383509278, 0.00163511745631695, 0,
0.00344009511172771, 0.999990999698639, -0.00249356147833169, 0,
-0.00162653462029994, 0.00249916850589216, 0.999995589256287, 0,
0.0256999991834164, 0.00126673700287938, 0.00358582031913102, 1
],
colorToDepth: [
0.999992787837982, -0.00343602383509278, 0.00163511745631695, 0,
0.00344009511172771, 0.999990999698639, -0.00249356147833169, 0,
-0.00162653462029994, 0.00249916850589216, 0.999995589256287, 0,
-0.0257013235241175, -0.00134619453456253, -0.00354716833680868, 1
],
depthDistortionModel: DistortionModel.INVERSE_BROWN_CONRADY,
depthDistortioncoeffs: [
0.126395508646965,
0.0701233819127083,
0.00355594046413898,
0.00548861175775528,
0.103697031736374,
],
colorDistortionModel: DistortionModel.NONE,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
} else if (cameraName === "ZR300") {
result = {
depthScale: 0.00100000005,
getDepthIntrinsics: function(width, height) {
if (width == 628 && height == 469) {
return {
offset: [309.912567, 234.410904],
focalLength: [575.729980, 575.729980],
};
} else if (width == 628 && height == 361) {
return {
offset: [238.683838, 180.205521],
focalLength: [445.920288, 445.920288],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[312.271545, 233.118652]
),
colorFocalLength: new Float32Array(
[616.316895, 617.343323]
),
depthToColor: [
0.999995947, 0.00140406948, 0.00246621366, 0,
-0.00140700850, 0.999998271, 0.00119038881, 0,
-0.00246453821, -0.00119385391, 0.999996245, 0,
-0.0587307774, 7.03283295e-05, 0.000553227146, 1
],
depthDistortionModel: DistortionModel.NONE,
depthDistortioncoeffs: [0, 0, 0, 0, 0],
colorDistortionModel: DistortionModel.MODIFIED_BROWN_CONRADY,
colorDistortioncoeffs: [
0.0727398321,
-0.138192296,
0.000800351670,
0.000444319186,
0
],
};
} else if (cameraName === "D415") {
result = {
depthScale: 0.00100000005,
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [315.847442626953, 241.684616088867],
focalLength: [643.142272949219, 643.142272949219],
};
} else if (width == 1280 && height == 720) {
return {
offset: [633.771179199219, 362.526947021484],
focalLength: [964.713439941406, 964.713439941406],
};
} else {
throwUnsupportedSizeError();
}
},
getColorIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [321.308288574219, 231.349639892578],
focalLength: [617.459838867188, 617.65087890625],
};
} else if (width == 1280 && height == 720) {
return {
offset: [641.96240234375, 347.024475097656],
focalLength: [926.189697265625, 926.476257324219],
};
} else if (width == 1920 && height == 1080) {
return {
offset: [962.943664550781, 520.536682128906],
focalLength: [1389.28454589844, 1389.71447753906],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[321.308288574219, 231.349639892578]
),
colorFocalLength: new Float32Array(
[617.459838867188, 617.65087890625]
),
colorToDepth: [
0.999988317489624, -0.000426474376581609, 0.00481635145843029, 0,
0.000353455223375931, 0.999885141849518, 0.0151513637974858, 0,
-0.00482225976884365, -0.0151494843885303, 0.999873638153076, 0,
-0.0150478817522526, 0.0000661657468299381, 0.000241686851950362, 1
],
depthToColor: [
0.999988317489624, 0.000353455223375931, -0.00482225976884365, 0,
-0.000426474376581609, 0.999885141849518, -0.0151494843885303, 0,
0.00481635145843029, 0.0151513637974858, 0.999873638153076, 0,
0.0150465695187449, -0.0000645012842142023, -0.00031321871210821, 1,
],
depthDistortionModel: DistortionModel.NONE,
depthDistortioncoeffs: [0, 0, 0, 0, 0],
colorDistortionModel: DistortionModel.NONE,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
} else if (cameraName === "D435") {
result = {
depthScale: 0.00100000005,
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [318.229400634766, 239.944534301758],
focalLength: [381.902008056641, 381.902008056641],
};
} else if (width == 1280 && height == 720) {
return {
offset: [637.048950195312, 359.907562255859],
focalLength: [636.503356933594, 636.503356933594],
};
} else {
throwUnsupportedSizeError();
}
},
getColorIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [324.276763916016, 233.025253295898],
focalLength: [616.862121582031, 617.127319335938],
};
} else if (width == 1280 && height == 720) {
return {
offset: [646.415161132812, 349.537872314453],
focalLength: [925.293212890625, 925.691040039062],
};
} else if (width == 1920 && height == 1080) {
return {
offset: [969.622741699219, 524.306823730469],
focalLength: [1387.93981933594, 1388.53649902344],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[324.276763916016, 233.025253295898]
),
colorFocalLength: new Float32Array(
[616.862121582031, 617.127319335938]
),
depthToColor: [
0.999992370605469, 0.000624090549536049, -0.00385748990811408, 0,
-0.000635052449069917, 0.999995768070221, -0.00284114643000066, 0,
0.00385570037178695, 0.00284357438795269, 0.999988496303558, 0,
0.0149379102513194, 0.000216223328607157, 0.000277608894975856, 1,
],
colorToDepth: [
0.999992370605469, -0.000635052449069917, 0.00385570037178695, 0,
0.000624090549536049, 0.999995768070221, 0.00284357438795269, 0,
-0.00385748990811408, -0.00284114643000066, 0.999988496303558, 0,
-0.0149368597194552, -0.000205947319045663, -0.000335816672304645, 1
],
depthDistortionModel: DistortionModel.NONE,
depthDistortioncoeffs: [0, 0, 0, 0, 0],
colorDistortionModel: DistortionModel.NONE,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
} else if (cameraName === "D435i") {
result = {
depthScale: 0.00100000005,
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [319.640411376953, 234.501083374023],
focalLength: [383.972534179688, 383.972534179688],
};
} else if (width == 1280 && height == 720) {
return {
offset: [639.400695800781, 350.835144042969],
focalLength: [639.954223632812, 639.954223632812],
};
} else {
throwUnsupportedSizeError();
}
},
getColorIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [326.527374267578, 241.035064697266],
focalLength: [613.288269042969, 613.207214355469],
};
} else if (width == 1280 && height == 720) {
return {
offset: [649.791015625, 361.552581787109],
focalLength: [919.932373046875, 919.810852050781],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[326.527374267578, 241.035064697266]
),
colorFocalLength: new Float32Array(
[613.288269042969, 613.207214355469]
),
depthToColor: [
0.999998152256012, 0.000072939285018947, -0.00191376695875078, 0,
-0.0000624307940597646, 0.999984920024872, 0.00549048557877541, 0,
0.00191413855645806, -0.00549035612493753, 0.999983072280884, 0,
0.0145636992529035, 0.0000774716536398046, 0.00038804262294434, 1,
],
colorToDepth: [
0.999998152256012, -0.0000624307940597646, 0.00191413855645806, 0,
0.000072939285018947, 0.999984920024872, -0.00549035612493753, 0,
-0.00191376695875078, 0.00549048557877541, 0.999983072280884, 0,
-0.0145629355683923, -0.0000786918026278727, -0.000415487680584192, 1
],
depthDistortionModel: DistortionModel.MODIFIED_BROWN_CONRADY,
depthDistortioncoeffs: [0, 0, 0, 0, 0],
colorDistortionModel: DistortionModel.MODIFIED_BROWN_CONRADY,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
} else if (cameraName === "generic4") {
result = {
depthScale: 0.00100000005,
getDepthIntrinsics: function(width, height) {
if (width == 640 && height == 480) {
return {
offset: [321.17535400390625, 248.4362640380859375],
focalLength: [402.60308837890625, 402.60308837890625],
};
} else {
throwUnsupportedSizeError();
}
},
colorOffset: new Float32Array(
[331.870422363281, 242.991546630859]
),
colorFocalLength: new Float32Array(
[629.172912597656, 628.130920410156]
),
depthToColor: [
0.999902248382, 0.010088876821, 0.009682051837, 0,
-0.010075648315, 0.9999482631683, -0.001414125669, 0,
0.009695817716, 0.001316434470, 0.99995213747, 0,
0.036090422422, 0.000611198542174, -0.00184865354, 1
],
depthDistortionModel: DistortionModel.NONE,
depthDistortioncoeffs: [0, 0, 0, 0, 0],
colorDistortionModel: DistortionModel.NONE,
colorDistortioncoeffs: [0, 0, 0, 0, 0],
};
} else {
throw {
name: "CameraNotSupported",
message: "Sorry, your camera '" + cameraName + "' is not supported",
};
}
// This also de-normalizes the depth value (it's originally a 16-bit
// integer normalized into a float between 0 and 1).
result.depthScale = result.depthScale * 65535;
result.cameraName = cameraName;
return result;
}
}
function chromeVersion() {
const raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
return raw ? parseInt(raw[2], 10) : false;
}
================================================
FILE: depth-to-color-sync-render.js
================================================
/*jshint esversion: 6 */
/*
* Copyright (c) 2018, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* 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.
*/
const REDUCE_BLACK_PASSES = 7;
class DepthToColorSyncRender {
constructor(canvas) {
let gl;
try {
gl = canvas.getContext('webgl2', {antialias: false});
} catch (e) {
console.error('Your browser doesn\'t support WebGL2.');
throw new Error(`Could not create WebGL2 context: ${e}`);
}
this.gl = gl;
this.programs = this.setupPrograms(gl);
gl.getExtension('EXT_color_buffer_float');
gl.getExtension('OES_texture_float_linear');
this.PAUSE_REQUESTED = 1;
this.PAUSED = 2;
}
createVideo(w = 640, h = 480) {
var video = document.createElement("video");
video.crossOrigin = "anonymous";
video.width = w;
video.height = h;
video.autoplay = true;
video.loop = true;
video.oncanplay = function(){
video.video_loaded=true;
};
return video;
}
async setupCamera(depth_video = null) {
if (depth_video)
this.depthVideo = depth_video;
if (!this.depthVideo)
this.depthVideo = this.createVideo();
if (!this.colorVideo)
this.colorVideo = this.createVideo(this.gl.canvas.width, this.gl.canvas.height);
if (!this.depthVideo.srcObject)
this.depthVideo.srcObject = await DepthCamera.getDepthStream();
const depthStream = this.depthVideo.srcObject;
const calibration = DepthCamera.getCameraCalibration(depthStream);
// Supported only for D400-Series Depth Cameras
if (calibration.cameraName.indexOf('D4') == -1) {
throw new Error('Background removal is supported only for Intel\u00ae RealSense\u2122 D400-Series Depth Cameras.');
}
if (!this.colorVideo.srcObject) {
const colorStream =
await DepthCamera.getColorStreamForDepthStream(depthStream, this.colorVideo.width, this.colorVideo.height);
this.colorVideo.srcObject = colorStream;
}
return calibration;
}
showBackgroundColor(on) {
this.backgroundColor = on;
}
showBackgroundVideo(on) {
this.backgroundVideo = on;
if (!this.backgroundVideoElement) {
const video = this.createVideo();
this.backgroundVideoElement = video;
video.src = "res/landscape.mp4";
}
if (on)
this.backgroundVideoElement.play();
else
this.backgroundVideoElement.pause();
}
// Create textures into which the camera output will be stored.
setupTextures(gl, programs, width, height, colorwidth, colorheight) {
let lastTextureId = 0;
function createTexture2D(format, w, h, filter = gl.NEAREST) {
gl.activeTexture(gl[`TEXTURE${lastTextureId}`]);
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
gl.texStorage2D(
gl.TEXTURE_2D,
1, // number of mip-map levels
format, // internal format
w,
h,
);
texture.unit = lastTextureId++;
texture.w = w;
texture.h = h;
return texture;
}
const depth0 = createTexture2D(gl.R32F, width, height);
const depth1 = createTexture2D(gl.R32F, width, height);
const color = createTexture2D(gl.RGBA8, colorwidth, colorheight);
const colorFilter = createTexture2D(gl.RGBA8, colorwidth, colorheight);
const noHoles = createTexture2D(gl.RGBA8, colorwidth, colorheight);
const reduceBlack = [createTexture2D(gl.RGBA8, colorwidth, colorheight),
createTexture2D(gl.RGBA8, colorwidth, colorheight),
createTexture2D(gl.RGBA8, colorwidth, colorheight),
createTexture2D(gl.RGBA8, colorwidth, colorheight),
createTexture2D(gl.RGBA8, colorwidth, colorheight),
createTexture2D(gl.RGBA8, colorwidth, colorheight),
createTexture2D(gl.RGBA8, colorwidth, colorheight)];
const background = createTexture2D(gl.RGBA8, colorwidth, colorheight);
const previousBackground = createTexture2D(gl.RGBA8, colorwidth, colorheight);
const cleanup = createTexture2D(gl.RGBA8, colorwidth, colorheight);
const backgroundVideo = createTexture2D(gl.RGBA8, 1920, 1080, gl.LINEAR);
return {
depth: depth0,
previousDepth: depth1,
color: color,
colorFilter: colorFilter,
noHoles: noHoles,
reduceBlack: reduceBlack,
background: background,
previousBackground: previousBackground,
cleanup: cleanup,
backgroundVideo: backgroundVideo
};
}
setupPrograms(gl) {
this.vao = gl.createVertexArray();
gl.bindVertexArray(this.vao);
const vertex_buffer = gl.createBuffer();
this.vertex_buffer = vertex_buffer;
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertex_buffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0,0,1,0,1,1,0,1]), gl.STATIC_DRAW);
this.index_buffer= gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.index_buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0,1,2,0,2,3]), gl.STATIC_DRAW);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
const noHolesVertex = `#version 300 es
in vec2 v;
out vec2 t;
void main(){
gl_Position = vec4(v.x * 2.0 - 1.0, v.y * 2.0 - 1.0, 0, 1);
t = v;
}`;
const noHolesPixel = `#version 300 es
precision highp float;
layout(location = 0) out vec4 fragColor;
layout(location = 1) out vec4 backgroundColor;
in vec2 t;
uniform sampler2D sDepth;
uniform sampler2D sPreviousDepth;
uniform sampler2D sColor;
uniform sampler2D sPreviousBackground;
uniform vec3 dd; // vec3(1/w, 1/h, 0)
uniform vec3 ddDepth; // vec3(1/w, 1/h, 0)
uniform float depthScale;
uniform vec2 depthOffset;
uniform vec2 colorOffset;
uniform vec2 depthFocalLength;
uniform vec2 colorFocalLengthInv;
uniform mat4 colorToDepth;
const vec4 rgbmask = vec4(1.0, 1.0, 1.0, 0.0);
const float range = 0.9;
vec4 normalizeRG(vec4 c) {
float sum = dot(c, rgbmask);
return vec4(c.rgb / sum, c.a);
}
vec4 colorDeproject(vec2 index, float z) {
vec2 position2d = (index - colorOffset) * colorFocalLengthInv;
return vec4(position2d * z, z, 1.0);
}
float nonZeroDepth(sampler2D s, vec2 v) {
// If the depth is 0, return 1.0. We return 1.0 only because it is max
// value and we use it to find minimum among neighbour values.
vec4 c = texture(s, v);
return (c.r == 0.0) ? 1.0 : c.r;
}
void main(){
fragColor = texture(sColor, t);
vec4 backColor = texture(sPreviousBackground, t);
// Get the depth for color pixel.
vec4 colorPos = colorDeproject(t, 0.5);
vec4 depthPos = colorToDepth * colorPos;
vec2 position2d = depthPos.xy / depthPos.z;
vec2 v = position2d * depthFocalLength + depthOffset;
float z = texture(sDepth, v).r;
float z_around = min(min(nonZeroDepth(sDepth, v + ddDepth.rb),
nonZeroDepth(sDepth, v - ddDepth.rb)),
min(texture(sDepth, v + ddDepth.bg).r, //deliberatelly
nonZeroDepth(sDepth, v - ddDepth.bg)));
z = (z == 1.0) ? 0.0 : z;
z *= depthScale;
z_around *= depthScale;
// As depth and color are not sampled in the same time, prevent overlap
// during (moderate) movement. Overlap would render foreground to be
// transparent for a frame and we mitigate it by checking pixels around.
// z = min(z, z_around);
z = z_around < z ? z_around : z;
backColor = z > range ? vec4(fragColor.rgb, z) : backColor;
backgroundColor = backColor;
// TODO: use previous depth frame to get depth value if not defined
// float z1 = texture(sPreviousDepth, v).r;
// z1 = (z1 == 1.0) ? 0.0 : z1;
// z = (z == 0.0) ? z1 * depthScale : z;
// clamp up to 0.95 for expressing value using color alpha channel.
// [0-0.9] would express foreground, [0.9-0.95] background from depth
// camera and [0.95-1] computed background based on color fill.
z = (z > 0.95) ? 0.95 : z;
// TODO: use background map to fix edges.
/*
vec4 distN = normalizeRG(fragColor) - normalizeRG(backColor);
vec4 dist = fragColor - backColor;
z = (z == 0.0 && dot(distN.rgb, distN.rgb) < 0.003 &&
dot(dist.rgb, dist.rgb) < 0.008 && backColor.a > 0.9) ? backColor.a : z;
z = (z > 0.95) ? 0.95 : z;
*/
fragColor.rgb = sqrt(fragColor.rgb); // gamma correction aproximation.
fragColor.a = z;
}`;
const reduceBlackVertex = `#version 300 es
in vec2 v;
out vec2 t;
void main(){
gl_Position = vec4(v.x * 2.0 - 1.0, v.y * 2.0 - 1.0, 0, 1);
t = v;
}`;
const reduceBlackPixel = `#version 300 es
precision mediump float;
uniform sampler2D s;
uniform vec4 samplingStep;
vec4 bckgndThreshold = vec4(0.9);
in vec2 t;
out vec4 fragColor;
void main(){
vec4 c = texture(s, t);
fragColor = c;
if (c.a > 0.9)
return;
const vec4 similarThreshold = vec4(0.011);
const float k = similarThreshold.r / 0.035;
vec4 dd3 = samplingStep;
vec4 dd4 = dd3 * 1.414213562;
vec4 dd6 = 3.0 * dd3;
vec4 dd8 = 3.0 * dd4;
vec4 dd1 = 0.3333 * dd3;
vec4 dd2 = 0.3333 * dd4;
vec4 c11 = texture(s, t - dd3.rg);
vec4 c15 = texture(s, t + dd3.rg);
vec4 c13 = texture(s, t - dd3.bg);
vec4 c17 = texture(s, t + dd3.bg);
vec4 c12 = texture(s, t - dd4.ag);
vec4 c16 = texture(s, t + dd4.ag);
vec4 c18 = texture(s, t - dd4.ra);
vec4 c14 = texture(s, t + dd4.ra);
vec4 c21 = texture(s, t - dd6.rg);
vec4 c25 = texture(s, t + dd6.rg);
vec4 c23 = texture(s, t - dd6.bg);
vec4 c27 = texture(s, t + dd6.bg);
vec4 c22 = texture(s, t - dd8.ag);
vec4 c26 = texture(s, t + dd8.ag);
vec4 c28 = texture(s, t - dd8.ra);
vec4 c24 = texture(s, t + dd8.ra);
vec4 c01 = texture(s, t - dd1.rg);
vec4 c05 = texture(s, t + dd1.rg);
vec4 c03 = texture(s, t - dd1.bg);
vec4 c07 = texture(s, t + dd1.bg);
vec4 c02 = texture(s, t - dd2.ag);
vec4 c06 = texture(s, t + dd2.ag);
vec4 c08 = texture(s, t - dd2.ra);
vec4 c04 = texture(s, t + dd2.ra);
// ci1 and ci5, ci2 and ci6,... are opposite. From z01 and z02, which
// contain depth of the nearest 8 pixels, to z21 and z22 for the
// furthest pixels.
vec4 z01 = vec4(c01.a, c02.a, c03.a, c04.a);
vec4 z02 = vec4(c05.a, c06.a, c07.a, c08.a);
vec4 z11 = vec4(c11.a, c12.a, c13.a, c14.a);
vec4 z12 = vec4(c15.a, c16.a, c17.a, c18.a);
vec4 z21 = vec4(c21.a, c22.a, c23.a, c24.a);
vec4 z22 = vec4(c25.a, c26.a, c27.a, c28.a);
vec4 background01 = vec4(greaterThan(z01, bckgndThreshold));
vec4 background02 = vec4(greaterThan(z02, bckgndThreshold));
vec4 background11 = vec4(greaterThan(z11, bckgndThreshold));
vec4 background12 = vec4(greaterThan(z12, bckgndThreshold));
vec4 background21 = vec4(greaterThan(z21, bckgndThreshold));
vec4 background22 = vec4(greaterThan(z22, bckgndThreshold));
// Current pixel values, packed for parallel diff.
vec4 rn = vec4(c.r);
vec4 gn = vec4(c.g);
vec4 bn = vec4(c.b);
// Use naive RGB diff for first prototype to evaluate similar colors.
vec4 r01 = vec4(c01.r, c02.r, c03.r, c04.r);
vec4 r02 = vec4(c05.r, c06.r, c07.r, c08.r);
vec4 g01 = vec4(c01.g, c02.g, c03.g, c04.g);
vec4 g02 = vec4(c05.g, c06.g, c07.g, c08.g);
vec4 b01 = vec4(c01.b, c02.b, c03.b, c04.b);
vec4 b02 = vec4(c05.b, c06.b, c07.b, c08.b);
vec4 diffr1 = abs(r01 - rn - g01 + gn);
vec4 diffr2 = abs(r02 - rn - g02 + gn);
vec4 diffg1 = max(abs(g01 - gn - b01 + bn), abs(r01 - rn) * k);
vec4 diffg2 = max(abs(g02 - gn - b02 + bn), abs(r02 - rn) * k);
vec4 diffb1 = max(abs(b01 - bn), abs(g01 - gn)) * k;
vec4 diffb2 = max(abs(b02 - bn), abs(g02 - gn)) * k;
vec4 sim01 = vec4(lessThan(max(max(diffr1, diffg1), diffb1), similarThreshold));
vec4 sim02 = vec4(lessThan(max(max(diffr2, diffg2), diffb2), similarThreshold));
vec4 r11 = vec4(c11.r, c12.r, c13.r, c14.r);
vec4 r12 = vec4(c15.r, c16.r, c17.r, c18.r);
vec4 g11 = vec4(c11.g, c12.g, c13.g, c14.g);
vec4 g12 = vec4(c15.g, c16.g, c17.g, c18.g);
vec4 b11 = vec4(c11.b, c12.b, c13.b, c14.b);
vec4 b12 = vec4(c15.b, c16.b, c17.b, c18.b);
diffr1 = abs(r11 - rn - g11 + gn);
diffr2 = abs(r12 - rn - g12 + gn);
diffg1 = max(abs(g11 - gn - b11 + bn), abs(r11 - rn) * k);
diffg2 = max(abs(g12 - gn - b12 + bn), abs(r12 - rn) * k);
diffb1 = max(abs(b11 - bn), abs(g11 - gn)) * k;
diffb2 = max(abs(b12 - bn), abs(g12 - gn)) * k;
vec4 sim11 = vec4(lessThan(max(max(diffr1, diffg1), diffb1), similarThreshold));
vec4 sim12 = vec4(lessThan(max(max(diffr2, diffg2), diffb2), similarThreshold));
vec4 r21 = vec4(c21.r, c22.r, c23.r, c24.r);
vec4 r22 = vec4(c25.r, c26.r, c27.r, c28.r);
vec4 g21 = vec4(c21.g, c22.g, c23.g, c24.g);
vec4 g22 = vec4(c25.g, c26.g, c27.g, c28.g);
vec4 b21 = vec4(c21.b, c22.b, c23.b, c24.b);
vec4 b22 = vec4(c25.b, c26.b, c27.b, c28.b);
diffr1 = abs(r21 - rn - g21 + gn);
diffr2 = abs(r22 - rn - g22 + gn);
diffg1 = max(abs(g21 - gn - b21 + bn), abs(r21 - rn) * k);
diffg2 = max(abs(g22 - gn - b22 + bn), abs(r22 - rn) * k);
diffb1 = max(abs(b21 - bn), abs(g21 - gn)) * k;
diffb2 = max(abs(b22 - bn), abs(g22 - gn)) * k;
vec4 sim21 = vec4(lessThan(max(max(diffr1, diffg1), diffb1), similarThreshold));
vec4 sim22 = vec4(lessThan(max(max(diffr2, diffg2), diffb2), similarThreshold));
vec4 sb11 = sim11 * background11;
vec4 sb12 = sim12 * background12;
vec4 sb01 = sim01 * background01;
vec4 sb02 = sim02 * background02;
vec4 sdocfodbz1 = sim01 * background01 + sim11 * (background11 + sim21 * background21);
vec4 sdocfodbz2 = sim02 * background02 + sim12 * (background12 + sim22 * background22);
if (dot(sdocfodbz1, sdocfodbz1) + dot(sdocfodbz2, sdocfodbz2) > 0.0) {
float coef = 0.3;
float count1 = dot(sb11, sb11) + dot(sb12, sb12) + coef;
float count0 = dot(sb01, sb01) + dot(sb02, sb02) + coef;
vec3 ch = c.rgb * coef;
if (count0 > coef) {
float rf = dot(sb01, r01) + dot(sb02, r02);
float gf = dot(sb01, g01) + dot(sb02, g02);
float bf = dot(sb01, b01) + dot(sb02, b02);
ch = (ch + vec3(rf, gf, bf)) / count0;
fragColor = vec4(ch, 0.9804); // 0.9804 is for debugging.
return;
}
float rf = dot(sb11, r11) + dot(sb12, r12);
float gf = dot(sb11, g11) + dot(sb12, g12);
float bf = dot(sb11, b11) + dot(sb12, b12);
ch = (ch + vec3(rf, gf, bf)) / count1;
fragColor = vec4(ch, count1 > coef ? 0.9804 : 1.0);
return;
}
}`;
const cleanupVertex = `#version 300 es
in vec2 v;
out vec2 t;
void main(){
gl_Position = vec4(v.x * 2.0 - 1.0, v.y * 2.0 - 1.0, 0, 1);
t = v;
}`;
const cleanupPixel = `#version 300 es
precision mediump float;
uniform sampler2D s;
uniform vec4 dd;
uniform vec4 mappedRectangle;
in vec2 t;
out vec4 fragColor;
const vec4 range = vec4(0.9);
void main(){
vec4 c = texture(s, t);
vec4 d1 = vec4(texture(s, t + dd.ra).a,
texture(s, t + dd.rg).a,
texture(s, t + dd.ag).a,
texture(s, t + dd.bg).a);
vec4 d2 = vec4(texture(s, t - dd.ra).a,
texture(s, t - dd.rg).a,
texture(s, t - dd.ag).a,
texture(s, t - dd.bg).a);
d1 = vec4(lessThan(d1, range));
d2 = vec4(lessThan(d2, range));
float count = dot(d1, d1) + dot(d2, d2);
c.a = (c.a < range.x) ? (count <= 3.0 ? 0.01 : count <= 6.0 ? 0.03 : c.a) :
(c.a > range.x && count >= 5.0) ? 0.5 : c.a;
float a = t.x < mappedRectangle.x ? 1.0 : c.a;
fragColor = vec4(c.rgb, a);
}`;
const renderVertex = `
attribute vec2 v;
varying vec2 t;
void main(){
gl_Position = vec4(v.x * 2.0 - 1.0, -v.y * 2.0 + 1.0, 0, 1);
t = v;
}`;
const renderPixel = `
precision mediump float;
uniform sampler2D s;
uniform sampler2D sBackground;
uniform float backgroundMode;
uniform sampler2D backgroundVideo;
uniform vec2 backgroundVideoScale;
varying vec2 t;
const vec4 rgbmask = vec4(1.0, 1.0, 1.0, 0.0);
const float range = 0.9;
void main(){
vec4 tex = texture2D(s, t);
vec2 bs = t * backgroundVideoScale + (vec2(1.0) - backgroundVideoScale) * 0.5;
vec4 video = texture2D(backgroundVideo, bs);
gl_FragColor = (tex.a < range) ? tex : vec4(0.0);
float alpha = tex.a > 0.0 ? tex.a < 0.015 ? 0.0 : (tex.a < 0.0350 ? 0.3 : 1.0) : 1.0;
vec4 background = vec4(0.0);
if (tex.a == 1.0) {
background = vec4(1.0, 0.6, 0.1, 1.0);;
} else if (tex.a > 0.99)
background = vec4(1.0, 0.5, 0.5, 1.0);
else if (tex.a > 0.9803)
background = vec4(0.3, 0.8, 1.0, 1.0);
else if (tex.a > 0.972)
background = vec4(0.5, 0.5, 0.7, 1.0);
else if (tex.a == 0.0)
background = vec4(1.0, 1.0, 0.0, 1.0);
else if (tex.a > range)
background = vec4(0.0, 1.0, 1.0, 1.0);
else if (tex.a > 0.035 && tex.a < 0.05)
background = vec4(1.0, 0.0, 0.0, 1.0);
background = vec4(0.0, 1.0, 1.0, 1.0);
background = backgroundMode == 2.0 ? video : background;
alpha = backgroundMode == 0.0 ? 1.0 : tex.a > range ? 0.0 : alpha;
// Square the RGB values to revert noHolesPixel's gamma approximation.
gl_FragColor = mix(background, vec4(tex.rgb * tex.rgb, 1.0), alpha);
}`;
function createProgram(gl, vs, ps) {
var vertex_shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertex_shader, vs);
gl.compileShader(vertex_shader);
var pixel_shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(pixel_shader, ps);
gl.compileShader(pixel_shader);
var program = gl.createProgram();
gl.attachShader(program, vertex_shader);
gl.attachShader(program, pixel_shader);
gl.linkProgram(program);
const vinfo = gl.getShaderInfoLog(vertex_shader);
const pinfo = gl.getShaderInfoLog(pixel_shader);
if (vinfo.length > 0)
console.error(vinfo);
if (pinfo.length > 0)
console.error(pinfo);
gl.useProgram(program);
const vertex_location = gl.getAttribLocation(program, "v");
if (vertex_location == -1)
return program;
gl.enableVertexAttribArray(vertex_location);
program.vertex_location = vertex_location;
gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
gl.vertexAttribPointer(vertex_location, 2, gl.FLOAT, false, 0, 0);
return program;
}
return {
noHoles: createProgram(gl, noHolesVertex, noHolesPixel),
reduceBlack: createProgram(gl, reduceBlackVertex, reduceBlackPixel),
cleanup: createProgram(gl, cleanupVertex, cleanupPixel),
render: createProgram(gl, renderVertex, renderPixel),
}
}
setup(gl, cameraParams, depthW, depthH, colorW, colorH) {
const createFramebuffer2D = (gl, textureList) => {
const framebuffer = gl.createFramebuffer();
const drawBuffers = [];
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
for (let i = 0; i < textureList.length; i += 1) {
const texture = textureList[i];
drawBuffers.push(gl[`COLOR_ATTACHMENT${i}`]);
gl.framebufferTexture2D(
gl.FRAMEBUFFER,
gl[`COLOR_ATTACHMENT${i}`],
gl.TEXTURE_2D,
texture,
0, // mip-map level
);
}
gl.drawBuffers(drawBuffers);
return framebuffer;
}
if (!this.textures)
this.textures = this.setupTextures(gl, this.programs, depthW, depthH, colorW, colorH);
this.initUniforms(gl, cameraParams, depthW, depthH);
const textures = this.textures;
const sk = 11;
const push = 32;
// init passes with framebuffers
if (!this.passes) {
this.passes = [{
framebuffer: createFramebuffer2D(gl, [textures.noHoles, textures.background]),
program: this.programs.noHoles,
}, {
in: textures.noHoles,
samplingStep: [sk / colorW, sk / colorH, -sk / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[0]]),
program: this.programs.reduceBlack,
}, {
in: textures.reduceBlack[0],
samplingStep: [sk / colorW, sk / colorH, -sk / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[1]]),
program: this.programs.reduceBlack,
}, {
in: textures.reduceBlack[1],
samplingStep: [(sk - 2) / colorW, (sk - 2) / colorH, -(sk - 2) / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[2]]),
program: this.programs.reduceBlack,
}, {
in: textures.reduceBlack[2],
samplingStep: [(sk - 4) / colorW, (sk - 4) / colorH, -(sk - 4) / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[3]]),
program: this.programs.reduceBlack,
}, {
in: textures.reduceBlack[3],
samplingStep: [(sk - 5) / colorW, (sk - 5) / colorH, -(sk - 5) / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[4]]),
program: this.programs.reduceBlack,
}, {
in: textures.reduceBlack[4],
samplingStep: [(sk - 7) / colorW, (sk - 7) / colorH, -(sk - 7) / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[5]]),
program: this.programs.reduceBlack,
}, {
in: textures.reduceBlack[5],
samplingStep: [(sk - 7) / colorW, (sk - 7) / colorH, -(sk - 7) / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.reduceBlack[6]]),
program: this.programs.reduceBlack,
}, {
samplingStep: [2 / colorW, 2 / colorH, -2 / colorW, 0.0],
framebuffer: createFramebuffer2D(gl, [textures.cleanup]),
program: this.programs.cleanup,
}, {
framebuffer: null,
program: this.programs.render
}];
}
this.initAttributes(gl);
}
initAttributes(gl) {
gl.bindVertexArray(this.vao);
gl.useProgram(this.programs.render);
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertex_buffer);
gl.vertexAttribPointer(this.programs.render.vertex_location, 2, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.index_buffer);
}
initUniforms(gl, cameraParams, width, height) {
const textures = this.textures;
const color = textures.color;
const intrin = cameraParams.getDepthIntrinsics(width, height);
const colorIntrin = cameraParams.getColorIntrinsics(color.w, color.h);
const offsetx = (intrin.offset[0] / width);
const offsety = (intrin.offset[1] / height);
const focalxinv = width / intrin.focalLength[0];
const focalyinv = height / intrin.focalLength[1];
const focalx = intrin.focalLength[0] / width;
const focaly = intrin.focalLength[1] / height;
const coloroffsetx = colorIntrin.offset[0] / color.w;
const coloroffsety = colorIntrin.offset[1] / color.h;
const colorfocalx = colorIntrin.focalLength[0] / color.w;
const colorfocaly = colorIntrin.focalLength[1] / color.h;
const colorfocalxinv = color.w / colorIntrin.focalLength[0];
const colorfocalyinv = color.h / colorIntrin.focalLength[1];
// Shaders asume const range up to 0.9, in order to express the depth using
// color alpha channel.
const range = 1.5; // meaning 1.1 meters away from camera should be hidden.
const scale = cameraParams.depthScale * 0.9 / range;
const noHoles = this.programs.noHoles;
gl.useProgram(noHoles);
noHoles.sDepth = gl.getUniformLocation(noHoles, "sDepth");
noHoles.sPreviousDepth = gl.getUniformLocation(noHoles, "sPreviousDepth");
noHoles.sColor = gl.getUniformLocation(noHoles, "sColor");
noHoles.sPreviousBackground = gl.getUniformLocation(noHoles, "sPreviousBackground");
gl.uniform3f(gl.getUniformLocation(noHoles, 'ddDepth'), 5 / width, 5 / height, 0);
gl.uniform3f(gl.getUniformLocation(noHoles, 'dd'), 1 / color.w, 1 / color.h, 0);
gl.uniform1f(gl.getUniformLocation(noHoles, 'depthScale'), scale);
gl.uniform2f(gl.getUniformLocation(noHoles, 'depthFocalLength'), focalx, focaly);
gl.uniform2f(gl.getUniformLocation(noHoles, 'depthOffset'), offsetx, offsety);
gl.uniform2f(gl.getUniformLocation(noHoles, 'colorFocalLengthInv'), colorfocalxinv, colorfocalyinv);
gl.uniform2f(gl.getUniformLocation(noHoles, 'colorOffset'), coloroffsetx, coloroffsety);
gl.uniformMatrix4fv(gl.getUniformLocation(noHoles, "colorToDepth"), false, cameraParams.colorToDepth);
const reduceBlack = this.programs.reduceBlack;
gl.useProgram(reduceBlack);
reduceBlack.s = gl.getUniformLocation(reduceBlack, "s");
reduceBlack.samplingStep = gl.getUniformLocation(reduceBlack, "samplingStep");
const cleanup = this.programs.cleanup;
gl.useProgram(cleanup);
const last = textures.reduceBlack[REDUCE_BLACK_PASSES - 1];
gl.uniform1i(gl.getUniformLocation(cleanup, "s"), last.unit);
gl.uniform4f(gl.getUniformLocation(cleanup, 'mappedRectangle'), cameraParams.cameraName == "D415" ? 0.08 : 0, 0, 1, 1);
gl.uniform4f(gl.getUniformLocation(cleanup, 'dd'), 1 / color.w, 1 / color.h, -1 / color.w, 0);
const render = this.programs.render;
gl.useProgram(render);
gl.uniform1i(gl.getUniformLocation(render, "s"), textures.cleanup.unit);
gl.uniform1i(gl.getUniformLocation(render, "backgroundVideo"), textures.backgroundVideo.unit);
gl.uniform2f(gl.getUniformLocation(render, "backgroundVideoScale"),
(textures.backgroundVideo.h / color.h) / (textures.backgroundVideo.w / color.w) , 1.0);
render.backgroundMode = gl.getUniformLocation(render, "backgroundMode");
render.sBackground = gl.getUniformLocation(render, "sBackground");
}
// it is loaded externally.
setDepthVideo(video) {
this.depthVideo = video;
if (video.videoWidth > 2) {
this.depthVideo.video_loaded = true;
return;
}
video.oncanplay = function() {
video.video_loaded=true;
}
}
async play() {
const cameraParams = await this.setupCamera(this.depthVideo).catch((error) => {
console.error(error);
});
let frame = 0;
let textures;
const colorVideo = this.colorVideo;
const depthVideo = this.depthVideo;
const programs = this.programs;
const renderer = this;
const gl = renderer.gl;
let width = 0;
let height = 0;
let currentDepthTime = 0;
let currentColorTime = 0;
let currentBackgroundVideoTime = 0;
let this_ = this;
if (this.paused == this.PAUSE_REQUESTED) {
// if we get new play before paused is fulfilled, avoid second
// requestAnimationFrame issue;
this.paused = 0;
return;
} else if (this.paused == 0) {
console.error("DCHECK failed on paused");
return;
}
// Run for each frame. Will do nothing if the camera is not ready yet.
const animate = function () {
if (depthVideo.video_loaded && colorVideo.video_loaded) {
if (frame === 0) {
width = depthVideo.videoWidth;
height = depthVideo.videoHeight;
renderer.setup(gl, cameraParams, width, height, colorVideo.videoWidth, colorVideo.videoHeight);
textures = renderer.textures;
}
try {
if (depthVideo.currentTime != currentDepthTime) {
const temp = textures.depth;
textures.depth = textures.previousDepth;
textures.previousDepth = temp;
currentDepthTime = depthVideo.currentTime;
gl.activeTexture(gl[`TEXTURE${textures.depth.unit}`]);
gl.bindTexture(gl.TEXTURE_2D, textures.depth);
gl.texSubImage2D(
gl.TEXTURE_2D,
0, // mip-map level
0, // x-offset
0, // y-offset
width,
height,
gl.RED,
gl.FLOAT,
depthVideo,
);
}
if (colorVideo.currentTime != currentColorTime) {
const temp = textures.background;
textures.previousBackground = textures.background;
textures.background = textures.previousBackground;
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.passes[0].framebuffer);
gl.framebufferTexture2D(
gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT1,
gl.TEXTURE_2D,
textures.background,
0, // mip-map level
);
currentColorTime = colorVideo.currentTime;
gl.activeTexture(gl[`TEXTURE${textures.color.unit}`]);
gl.bindTexture(gl.TEXTURE_2D, textures.color);
gl.texSubImage2D(
gl.TEXTURE_2D,
0, // mip-map level
0, // x-offset
0, // y-offset
colorVideo.videoWidth,
colorVideo.videoHeight,
gl.RGBA,
gl.UNSIGNED_BYTE,
colorVideo,
);
}
const back = this_.backgroundVideoElement;
if (this_.backgroundVideo && currentBackgroundVideoTime != back.currentTime) {
currentBackgroundVideoTime = back.currentTime;
gl.activeTexture(gl[`TEXTURE${textures.backgroundVideo.unit}`]);
gl.bindTexture(gl.TEXTURE_2D, textures.backgroundVideo);
gl.texSubImage2D(
gl.TEXTURE_2D,
0, // mip-map level
0, // x-offset
0, // y-offset
back.videoWidth,
back.videoHeight,
gl.RGBA,
gl.UNSIGNED_BYTE,
back,
);
}
} catch (e) {
console.error(`Error uploading video to WebGL:
${e.name}, ${e.message}`);
}
let l;
let program;
gl.bindVertexArray(renderer.vao);
for (let i = 0; i < renderer.passes.length; ++i) {
const pass = renderer.passes[i];
// comment previous two lines and uncomment following to measure
// latency of rendering only
// { const pass = gl.passes[6];
gl.useProgram(pass.program);
if (pass.in && pass.program.s)
gl.uniform1i(pass.program.s, pass.in.unit);
if (pass.samplingStep && pass.program.samplingStep)
gl.uniform4fv(pass.program.samplingStep, pass.samplingStep);
if (pass.program.sDepth)
gl.uniform1i(pass.program.sDepth, textures.depth.unit);
if (pass.program.sPreviousDepth)
gl.uniform1i(pass.program.sPreviousDepth, textures.previousDepth.unit);
if (pass.program.sColor)
gl.uniform1i(pass.program.sColor, textures.color.unit);
if (pass.program.sPreviousBackground)
gl.uniform1i(pass.program.sPreviousBackground, textures.previousBackground.unit);
if (pass.program.sBackground)
gl.uniform1i(pass.program.sBackground, textures.background.unit);
if (pass.program.backgroundMode) {
gl.uniform1f(pass.program.backgroundMode, this_.backgroundColor ?
1 : this_.backgroundVideo ? 2 : 0);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, pass.framebuffer);
gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
}
frame += 1;
}
if (renderer.paused == renderer.PAUSE_REQUESTED) {
renderer.paused = renderer.PAUSED;
return;
}
window.requestAnimationFrame(animate);
};
animate();
}
pause() {
this.paused = 2;
}
}
================================================
FILE: depthdemo.html
================================================
<html>
<head>
</head>
<style>
body {
display: flex;
flex-direction: column;
font-family: 'Roboto', 'Noto', sans-serif;
line-height: 1.5;
background-color: #fbfbfb;
margin: 20px;
}
.select {
margin: 16px 0px;
display: flex;
flex-direction: column;
max-width: 400px;
}
select {
background-color: transparent;
width: 100%;
padding: 4px 0;
font-size: 16px;
color: rgba(0,0,0, 0.26);
border: none;
border-bottom: 1px solid rgba(0,0,0, 0.12);
}
select:focus {
outline: none;
}
.select > label {
font-size: 10pt;
color: gray;
}
#console {
color: red;
font-size: 150%;
}
canvas {
border: 1px solid #cccccd;
background-color: white;
}
#tabcontainer {
margin: 16px 0px;
}
#tabcontainer input {
height: 35px;
visibility: hidden;
}
label[for=tab1], label[for=tab2] {
color: gray;
cursor: pointer;
display: block;
float: left;
height, : 40px;
line-height: 40px;
margin-right: 5px;
padding: 0 20px;
text-align: center;
}
#tabcontainer input:hover + label {
background: lightgray;
color: gray;
}
#tabcontainer input:checked + label {
background: #f0f0f0;
color: dimgray;
position: relative;
z-index: 6;
}
#tabcontent1, #tabcontent2 {
background: #f0f0f0;
opacity: 0;
position: absolute;
z-index: -100;
}
#tabcontainer input#tab1:checked ~ #tabcontent #tabcontent1,
#tabcontainer input#tab2:checked ~ #tabcontent #tabcontent2 {
opacity: 1;
z-index: 100;
}
input.visible {
visibility: visible !important;
}
video-stream {
color: dimgray;
}
#synctab {
margin: 16px;
padding:0px;
color: dimgray;
}
label[for=synccanvas] {
display:block;
}
#show-background-video {
position: absolute;
bottom: 50px;
right: 25px;
color: gray;
z-index: 5;
height: 20px;
text-align: right;
}
#show-background-color {
position: absolute;
bottom: 30px;
right: 25px;
color: gray;
z-index: 5;
height: 20px;
text-align: right;
}
#show-video-toggle, #show-color-toggle {
visibility: visible !important;
height: 15px !important;
vertical-align:middle;
}
</style>
<template id="video-stream">
<style>
:host {
display: flex;
flex-flow: row wrap;
}
canvas {
align-self: center;
}
div {
margin: 16px;
}
label {
display: block;
}
</style>
<div>
<label>WebGL canvas with depth video frame texture:</label>
<canvas id="canvasGL" width="640" height="480"></canvas>
</div>
<div>
<label><input type="checkbox" onchange="readAndShowPixels(this)"></input>gl.readPixels and show in 2D canvas</label>
<canvas id="canvas2D" width="640" height="480"></canvas>
</div>
</template>
<body onload="onLoad()">
<h2>Depth Capture Demo</h2>
<div id="console">
<!-- Print error messages here. -->
</div>
<div class="select">
<label for="selectVideoDevice">Capture device with depth stream</label>
<select id="selectVideoDevice"></select>
</div>
<div id="tabcontainer">
<input id="tab1" type="radio" name="tabs" value="basic" checked="checked" data-ontaboff="stopBasicTab" data-ontabon="startBasicTab"/>
<label for="tab1">Render depth</label>
<input id="tab2" type="radio" name="tabs" value="sync" data-ontaboff="stopSyncTab" data-ontabon="startSyncTab"/>
<label for="tab2">Background removal</label>
<div id="tabcontent">
<div id = tabcontent1>
<video-stream></video-stream>
</div>
<div id="tabcontent2">
<div id="synctab">
<label for="synccanvas">Color stream is displayed over depth that is aligned to color:</label>
<div id="show-background-video">background video <input id="show-video-toggle" type="checkbox">
</div>
<div id="show-background-color">background color <input id="show-color-toggle" type="checkbox">
</div>
<canvas id="synccanvas" width="640px" height="480px"
style="background-color: black;">
</canvas>
</div>
</div>
</div>
</div>
</body>
<script src="depth-camera.js"></script>
<script src="depth-to-color-sync-render.js"></script>
<script>
let readAndShowDepthPixels = false;
let error = window.console.error;
window.console.error = (message, ...rest) => {
let target = document.querySelector('#console');
error.call(window.console, message, ...rest);
if (message instanceof Error) {
message = `${message.name}: ${message.message}`;
}
target.innerHTML += `${message}<br>`;
}
function readAndShowPixels(element) {
readAndShowDepthPixels = element.checked;
}
let tabs = document.getElementsByName("tabs");
let videos = {depth: null, color: null};
let syncrender = new DepthToColorSyncRender(document.querySelector("#synccanvas"));
let selectedtab = tabs[0];
for(let i = 0; i < tabs.length; i++) {
tabs[i].onclick = function() {
if(this !== selectedtab) {
window[selectedtab.dataset.ontaboff]();
selectedtab = this;
window[selectedtab.dataset.ontabon]();
}
};
}
function stopVideo(video) {
if (video && video.srcObject) {
const cs = video.srcObject;
for (let track of cs.getTracks()) {
track.stop();
}
video.srcObject = null;
}
}
function startBasicTab() {
const videoStreamEl = document.querySelector('video-stream');
videoStreamEl.play();
}
function stopBasicTab() {
const videoStreamEl = document.querySelector('video-stream');
videoStreamEl.pause();
}
async function startSyncTab() {
syncrender.setDepthVideo(videos.depth);
await syncrender.play();
videos.color = syncrender.colorVideo;
videos.depth = syncrender.depthVideo;
}
function stopSyncTab() {
syncrender.pause();
stopVideo(videos.color);
}
const videoToggle = document.getElementById("show-video-toggle");
const colorToggle = document.getElementById("show-color-toggle");
videoToggle.addEventListener("change", function() {
if (this.checked)
colorToggle.checked = false;
syncrender.showBackgroundColor(false);
syncrender.showBackgroundVideo(this.checked);
});
colorToggle.addEventListener("change", function() {
if (this.checked)
videoToggle.checked = false;
syncrender.showBackgroundVideo(false);
syncrender.showBackgroundColor(this.checked);
});
customElements.define('video-stream', class extends HTMLElement {
constructor() {
super();
const template = document.querySelector('#video-stream');
const clone = document.importNode(template.content, true);
const shadowRoot = this.attachShadow({ mode: 'open' });
this.shadowRoot.appendChild(clone);
this._frameLoop = this._frameLoop.bind(this);
this.readBuffer = null;
this.readFormat = null;
}
connectedCallback() {
this.gl = this._configureGLContext();
const canvas = this.shadowRoot.getElementById("canvas2D");
this.ctx2d = canvas.getContext("2d");
this.frameAvailable = false;
this.video = this._createOffscreenVideo();
this.video.oncanplay = _ => { this.frameAvailable = true; }
this.video.addEventListener("play", this._frameLoop);
let hasTouchListeners = false;
const onVideoTouchStart = _ => {
hasTouchListeners = false;
window.removeEventListener("touchstart", onVideoTouchStart, true);
this.video.play();
}
if (this.video && this.video.paused && !hasTouchListeners) {
hasTouchListeners = true;
window.addEventListener("touchstart", onVideoTouchStart, true);
}
}
_createOffscreenVideo() {
return Object.assign(document.createElement("video"), {
autoplay: true,
loop: true,
crossOrigin: "anonymous",
width: 640,
height: 480
});
}
_frameLoop() {
const gl = this.gl;
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, gl.depth_texture);
if (this.frameAvailable) {
// Upload the video frame to texture.
if (gl.color_buffer_float_ext) {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, gl.RED, gl.FLOAT, this.video);
} else {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, gl.RGBA, gl.FLOAT, this.video);
}
if (readAndShowDepthPixels) {
// Read it back to buffer.
this._readPixels();
// TODO: process pixels.
// Put read and processed pixels to 2D canvas.
// Note: This is just one of scenarios for the demo. You can directly
// bind video to 2D canvas without using WebGL as intermediate step.
this._putReadPixelsTo2DCanvas();
}
}
gl.bindBuffer(gl.ARRAY_BUFFER, gl.vertex_buffer);
gl.vertexAttribPointer(gl.vertex_location, 2, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.index_buffer);
gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
if (!this.paused)
window.requestAnimationFrame(this._frameLoop);
}
pause() {
this.paused = true;
}
play() {
this.paused = false;
window.requestAnimationFrame(this._frameLoop);
}
_readPixels() {
const gl = this.gl;
// Bind the framebuffer the texture is color-attached to.
gl.bindFramebuffer(gl.FRAMEBUFFER, gl.framebuffer);
if (!this.readBuffer) {
this.readFormat = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT);
if (this.readFormat == gl.RED && gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE) == gl.FLOAT) {
this.readBuffer = new Float32Array(this.video.width * this.video.height);
} else {
this.readFormat = gl.RGBA;
this.readBuffer = new Float32Array(this.video.width * this.video.height * 4);
}
}
gl.readPixels(0, 0, this.video.width, this.video.height, this.readFormat, gl.FLOAT, this.readBuffer);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
}
_putReadPixelsTo2DCanvas() {
const img = this.ctx2d.getImageData(0, 0, this.video.width, this.video.height);
const data = img.data;
const stride = (this.readFormat === this.gl.RED) ? 1 : 4;
for (let i = 0, j = 0; i < data.length; i += 4, j += stride) {
data[i] = this.readBuffer[j] * 255;
data[i+3] = 255;
}
this.ctx2d.putImageData(img, 0, 0);
}
// Creates WebGL/WebGL2 context used to upload depth video to texture,
// read the pixels to Float buffer and optionElally render the texture.
_configureGLContext() {
const canvas = this.shadowRoot.getElementById("canvasGL");
const gl = canvas.getContext("webgl2");
if (gl) {
// The extension tells us if we can use single component R32F texture format.
gl.color_buffer_float_ext = gl.getExtension('EXT_color_buffer_float');
} else {
gl = canvas.getContext("webgl");
gl.getExtension("OES_texture_float");
}
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
// Shaders and program are needed only if rendering depth texture.
var vertex_shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertex_shader, `
attribute vec2 v;
varying vec2 t;
void main(){
gl_Position = vec4(v.x * 2.0 - 1.0, 1.0 - v.y * 2.0, 0, 1);
t = v;
}`);
gl.compileShader(vertex_shader);
var pixel_shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(pixel_shader, `
precision mediump float;
uniform sampler2D s;
varying vec2 t;
void main(){
vec4 tex = texture2D(s, t) * vec4(10.0, 10.0, 10.0, 1.0);
gl_FragColor = tex.rrra;
}`);
gl.compileShader(pixel_shader);
var program = gl.createProgram();
gl.attachShader(program, vertex_shader);
gl.attachShader(program, pixel_shader);
gl.linkProgram(program);
gl.useProgram(program);
var vertex_location = gl.getAttribLocation(program, "v");
gl.enableVertexAttribArray(vertex_location);
gl.uniform1i(gl.getUniformLocation(program, "s"), 0);
var vertex_buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0,0,1,0,1,1,0,1]), gl.STATIC_DRAW);
var index_buffer= gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buffer);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0,1,2,0,2,3]), gl.STATIC_DRAW);
var depth_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, depth_texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
// Framebuffer for reading back the texture.
var framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, depth_texture, 0);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.vertex_buffer = vertex_buffer;
gl.vertex_location = vertex_location;
gl.index_buffer = index_buffer;
gl.depth_texture = depth_texture;
gl.framebuffer = framebuffer;
return gl;
}
async loadStream(deviceId) {
stopVideo(videos.depth);
stopVideo(videos.color);
// If the item in drop-down list is selected, use it.
const getUserMedia = () => {
// add ?allow=all to URL to allow listing all devices (incl. those not supporting depth).
if (!deviceId && (new URL(window.location)).searchParams.get("allow") !== "all") {
return DepthCamera.getDepthStream();
}
const constraints = {
video: {
deviceId: deviceId ? { exact: deviceId } : {}
}
}
return navigator.mediaDevices.getUserMedia(constraints);
}
try {
const stream = await getUserMedia();
this.video.srcObject = stream;
videos.depth = this.video;
// Chrome, starting with version 59, implements getSettings() API.
const track = stream.getVideoTracks()[0];
if (track.getSettings) {
this.depthDeviceId = track.getSettings().deviceId;
}
} catch (err) {
console.error(err);
}
}
});
function populateSelectElement(devices) {
const selectEl = document.querySelector('#selectVideoDevice');
const videoStreamEl = document.querySelector('video-stream');
let selected = selectEl.value;
while (selectEl.firstChild) {
selectEl.removeChild(selectEl.firstChild);
}
let selectedDeviceStillExists = false;
for (let i = 0; i < devices.length; ++i) {
const info = devices[i];
if (info.kind !== 'videoinput') {
continue;
}
const optionEl = document.createElement('option');
optionEl.value = info.deviceId;
optionEl.text = info.label || 'camera ' + (selectEl.length + 1);
selectEl.appendChild(optionEl);
if (optionEl.value === selected) {
selectedDeviceStillExists = true;
}
}
if (selectedDeviceStillExists) {
selectEl.value = selected;
} else if (!selected) {
// If no other device is selected, set the initial selection to depth device.
if (videoStreamEl.depthDeviceId) {
selectEl.value = videoStreamEl.depthDeviceId;
}
}
}
function onLoad() {
const videoStreamEl = document.querySelector('video-stream');
const selectEl = document.querySelector('#selectVideoDevice');
selectEl.onchange = async event => {
selectEl.disabled = true;
const deviceId = event.target.value;
await videoStreamEl.loadStream(deviceId);
const devices = await navigator.mediaDevices.enumerateDevices();
populateSelectElement(devices);
if (selectedtab.value != "basic") {
// It is on by default; stop rendering it if not visible.
stopBasicTab();
}
window[selectedtab.dataset.ontabon]();
selectEl.disabled = false;
};
selectEl.dispatchEvent(new Event('change', { 'bubbles': true }))
}
</script>
</html>
================================================
FILE: gesture/depth_and_segments.js
================================================
/*jshint esversion: 6 */
// Copyright 2017 Intel Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
const INTERPOLATE_INV = 1 / 20.0; // interpolate depth physics at 20 pixels.
class DepthAndSegments {
constructor(gl, drawGL = null) {
this.gl = gl;
gl.depth_tex_unit = gl.depth_tex_unit | gl.TEXTURE0;
initGL(gl, drawGL);
reload();
// this.createDepthInfoCanvas();
this.out = {};
this.out1 = {};
this.out.segment_data = {};
this.out1.segment_data = {};
this.transform_feedback_draw_done = false;
this.gbsd_async_ready = false;
this.width = 640;
this.height = 480;
}
// In case when we use one WebGL context for processing (WebGL 2.0) and
// another |drawGL| for rendering depth, we upload depth texture to both.
//
process(drawGL) {
if (!video_loaded)
return false;
if (!init_done) {
this.videoLoaded(video, window.stream);
init_done = true;
}
const gl = this.gl;
if (this.transform_feedback_draw_done) {
// This is used only when WEBGL_get_buffer_sub_data_async extension is not
// available.
gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, gl.tf_bo);
gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, tf_output, 0, tf_output.length);
gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, null);
processOnCPU();
this.identifyJointsAndFixNoise(out.segment_data);
this.out1 = this.out;
this.out = out;
putReadPixelsToTestCanvas(this.testContext);
this.transform_feedback_draw_done = false;
return true;
}
let processed = false;
if (this.gbsd_async_ready) {
// gbsd = getBufferSubData. Process the results from the previous frame
// make asynchronous request for this frame data below.
this.gbsd_async_ready = false;
processOnCPU();
this.identifyJointsAndFixNoise(out.segment_data);
this.out1 = this.out;
this.out = out;
putReadPixelsToTestCanvas(this.testContext);
processed = true;
}
if (video_last_upload_time == video.currentTime) {
return processed;
}
video_last_upload_time = video.currentTime;
gl.activeTexture(gl.depth_tex_unit);
gl.bindTexture(gl.TEXTURE_2D, gl.depth_texture);
// Upload the video frame to texture.
if (gl.color_buffer_float_ext) {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, gl.RED, gl.FLOAT, video);
} else {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, gl.RGBA, gl.FLOAT, video);
}
if (drawGL && drawGL != gl) {
drawGL.activeTexture(gl.depth_tex_unit);
drawGL.bindTexture(gl.TEXTURE_2D, drawGL.depth_texture);
drawGL.texImage2D(drawGL.TEXTURE_2D, 0, drawGL.RGBA, drawGL.RGBA, drawGL.FLOAT, video);
}
gl.enable(gl.RASTERIZER_DISCARD);
gl.useProgram(gl.compute_program);
gl.bindVertexArray(gl.depth_vao);
gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, gl.transform_feedback)
gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, gl.tf_bo)
gl.beginTransformFeedback(gl.POINTS);
gl.drawArrays(gl.POINTS, 0, tf_output.length);
gl.endTransformFeedback();
gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, null);
gl.bindVertexArray(null);
gl.disable(gl.RASTERIZER_DISCARD);
this.transform_feedback_draw_done = !gl.WEBGL_get_buffer_sub_data_async;
if (gl.WEBGL_get_buffer_sub_data_async) {
gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, gl.tf_bo);
this.gbsd_async_ready = false;
const this_ = this;
gl.WEBGL_get_buffer_sub_data_async.getBufferSubDataAsync(
gl.TRANSFORM_FEEDBACK_BUFFER, 0, tf_output, 0, tf_output.length).
then(function(buffer) {
this_.gbsd_async_ready = true;
});
gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, null);
}
return processed;
}
getMVPMatrix() {
return getMvpMatrix(window.innerWidth, window.innerHeight);
}
draw(mvp = null, lightmvp, light_position, shadow_map_unit) {
const gl = this.gl;
if (!video_loaded)
return;
gl.useProgram(gl.render_program);
gl.uniformMatrix4fv(gl.render_u_mvp, false, mvp || this.getMVPMatrix());
const point_size = ((window.innerHeight / height) | 0) + 1;
gl.uniform1f(gl.render_u_pointSize, point_size);
if (lightmvp) {
gl.uniformMatrix4fv(gl.u_mvp_from_light, false, lightmvp);
gl.uniform1f(gl.u_draw_lighting, 1.0);
gl.uniform1i(gl.render_u_shadow_map, shadow_map_unit);
} else {
// TODO: separate program for shadow rendering.
gl.uniform1f(gl.u_draw_lighting, 0);
// shadow map texture is bound to framebuffer. prevent loop as we use the
// same program for lighting and read from the same texture.
gl.uniform1i(gl.render_u_shadow_map, shadow_map_unit + 1);
}
if (light_position)
gl.uniform3fv(gl.render_u_light_position, light_position);
gl.bindVertexArray(gl.depth_vao);
gl.activeTexture(gl.depth_tex_unit);
gl.bindTexture(gl.TEXTURE_2D, gl.depth_texture);
gl.drawArrays(gl.POINTS, 0, width * height);
gl.bindVertexArray(null);
}
createDepthInfoCanvas() {
var canvas = document.createElement('canvas');
canvas.id = "testCanvas2D";
canvas.width = 640;
canvas.height = 480;
canvas.style.zIndex = 8;
canvas.style.position = "absolute";
canvas.style.border = "1px solid";
var body = document.getElementsByTagName("body")[0];
body.appendChild(canvas);
this.testContext = canvas.getContext("2d");
}
videoLoaded(video, stream) {
const gl = this.gl;
gl.bindBuffer(gl.ARRAY_BUFFER, gl.tf_bo);
tf_output = new Float32Array(video.videoWidth * video.videoHeight);
gl.bufferData(gl.ARRAY_BUFFER, tf_output.length * 4, gl.DYNAMIC_READ);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
links = new Array(video.videoWidth * video.videoHeight).fill(-1);
width = video.videoWidth;
height = video.videoHeight;
this.width = width;
this.height = height;
try {
this.setCameraParameters(DepthCamera.getCameraCalibration(stream));
} catch(e) {
return handleError(e);
}
if (this.depthVideoLoadedCallback)
this.depthVideoLoadedCallback();
}
setCameraParameters(parameters) {
const gl = this.gl;
const nearplane = 0.0;
const farplane = 0.75 / parameters.depthScale;
const program = gl.render_program;
gl.useProgram(program);
let shaderVar = gl.getUniformLocation(program, "u_depth_scale");
gl.uniform1f(shaderVar, parameters.depthScale);
const depthIntrinsics = parameters.getDepthIntrinsics(width, height);
shaderVar = gl.getUniformLocation(program, "u_depth_focal_length_inv");
const inv_focal_length = [1 / depthIntrinsics.focalLength[0], 1 / depthIntrinsics.focalLength[1]];
gl.uniform2fv(shaderVar, inv_focal_length);
shaderVar = gl.getUniformLocation(program, "u_depth_offset");
gl.uniform2fv(shaderVar, depthIntrinsics.offset);
gl.uniform2f(gl.getUniformLocation(program, "u_depth_texture_size"), width, height);
var shaderDepthTexture = gl.getUniformLocation(program, "u_depth_texture");
gl.uniform1i(shaderDepthTexture, gl.depth_tex_unit - gl.TEXTURE0);
this.depth_focal_inv = [1 / depthIntrinsics.focalLength[0],
1 / depthIntrinsics.focalLength[1]];
this.depth_offset = depthIntrinsics.offset;
this.depth_scale = parameters.depthScale;
gl.useProgram(gl.compute_program);
gl.uniform2f(gl.getUniformLocation(gl.compute_program, "u_plane"), nearplane, farplane);
gl.uniform2f(gl.getUniformLocation(gl.compute_program, "u_depth_size"), width, height);
// Coefficient is used to calculate the width of finger (in pixels) on given
// distance (depth) from camera. Assume that finger is wider than 0.6 cm.
const finger_half_width = 0.0027 * depthIntrinsics.focalLength[0] / parameters.depthScale;
gl.uniform1f(gl.getUniformLocation(gl.compute_program, "finger_half_width"), finger_half_width);
// 5 cm for longest finger segment. Fingers usually have 2-3 of those.
segment_coef = 0.05 * depthIntrinsics.focalLength[0] / parameters.depthScale;
this.depth_coef = this.depth_scale * this.depth_focal_inv[0]; // cache the computed
}
setXZFlip(value) {
const gl = this.gl;
gl.useProgram(gl.render_program);
gl.uniform1f(gl.render_u_xz_flip, value ? 0.0 : 1.0);
gl.useProgram(gl.compute_program);
gl.uniform1f(gl.compute_u_xz_flip, value ? 0.0 : 1.0);
}
identifyJointsAndFixNoise(segment_data) {
// in segment data, identify end points that are joints.
let keys = Object.keys(segment_data);
function square(p) { return p * p; }
function pointsNear(p, seg1, coef, scale) {
const distance = square(coef * (seg1.x - p.x)) + square(coef * (seg1.y - p.y))
+ square(scale * (seg1.depth - p.depth));
return distance < 0.0009;
}
for (let k = 0; k < keys.length; k++) {
const seg0 = segment_data[keys[k]];
const fl = seg0.far_left;
const fr = seg0.far_right;
for (let l = k + 1; l < keys.length; l++) {
const seg1 = segment_data[keys[l]];
// rough/fast estimation on arbitrary threshold.
const coef = seg1.depth * this.depth_coef;
const scale = this.depth_scale;
if (pointsNear(fl, seg1, coef, scale)) {
fl.joint = seg1.index;
seg1.joint = fl.index;
}
if (pointsNear(fr, seg1, coef, scale)) {
fr.joint = seg1.index;
seg1.joint = fr.index;
}
}
// check the special cases: vertical and horizontal orientation.
const maxy = Math.max(fr.y, fl.y);
if (fr.x - fl.x < 0.3 * (maxy - seg0.y)) {
// vertical thing, use the furthest one.
const in_the_middle = (fr.y < fl.y) ? fr : fl;
in_the_middle.joint = in_the_middle.index;
} else {
const ignore = seg0.count_right < seg0.count_left ? fr : fl;
ignore.joint = ignore.index;
}
}
// For endpoints that are not joints, we average using center points where
// available.
function useCenterIfAvailable(p) {
if (p.center.x == -1)
return;
p.x_original = p.x;
p.y_original = p.y;
p.x = p.center.x;
p.y = p.center.y;
p.index = p.x + p.y * width;
p.depth = modf(tf_output[p.index]);
}
function moveAwayFromEdge(p, to) {
// Limit the movement to 5mm.
const pixels = segment_coef_5mm / p.depth;
let xstep = 1;
let ystep = 1;
let steps = pixels;
const xdiff = Math.abs(p.x - to.x);
const ydiff = Math.abs(p.y - to.y);
if (xdiff < 2 && ydiff < 2)
return;
const hypotenuse = Math.sqrt(xdiff * xdiff + ydiff * ydiff);
if (xdiff > ydiff) {
xstep = Math.sign(p.x - to.x);
ystep = (p.y - to.y) / hypotenuse;
steps = pixels * xdiff / hypotenuse;
} else {
ystep = Math.sign(p.y - to.y);
xstep = (p.x - to.x) / hypotenuse;
steps = pixels * ydiff / hypotenuse;
}
let hitedge = false;
let x = p.x + 0.5;
let y = p.y + 0.5;
let i = 1;
while (i < steps) {
x += xstep;
y += ystep;
if (tf_output[(y | 0) * width + (x | 0)] == 0) {
break;
}
i++;
}
if (i >= steps)
return;
x = p.x - xstep * (steps - i);
y = p.y - ystep * (steps - i);
p.x = (x + 0.5) | 0;
p.y = (y + 0.5) | 0;
}
const segment_coef_5mm = segment_coef * 0.12;
for (let k = 0; k < keys.length; k++) {
const seg0 = segment_data[keys[k]];
if (!seg0.far_left.hasOwnProperty("joint"))
useCenterIfAvailable(seg0.far_left);
if (!seg0.far_right.hasOwnProperty("joint"))
useCenterIfAvailable(seg0.far_right);
// Move ends away from the edge.
const end = seg0.far_left.hasOwnProperty("joint") ? seg0.far_right : seg0.far_left;
if (!end.hasOwnProperty("joint"))
moveAwayFromEdge(end, seg0);
if (!seg0.hasOwnProperty("joint"))
moveAwayFromEdge(seg0, end);
}
}
// Non skeleton means that client knows the depth value is not on skeleton and
// here we know it is encoded as negative. Saves one abs - premature optimization :)
getDepthNonSkeleton(x, y) {
return modf(-tf_output[y * width + x]);
}
getSegmentInterpolatedCount(segment) {
const end = this.getSegmentEnd(segment);
return (end.distance2D * INTERPOLATE_INV) | 0;
}
// vec is float[3]: x, y in pixels define the screen point and depth is the captured
// value at the point.
getInterpolatedPoint(vec, segment, i) {
const end = this.getSegmentEnd(segment);
const coef = (i + 1) / (end.distance2D * INTERPOLATE_INV);
vec[0] = (segment.x + coef * (end.x - segment.x)) | 0;
vec[1] = (segment.y + coef * (end.y - segment.y)) | 0;
vec[2] = segment.depth + coef * (end.depth - segment.depth);
}
getSegmentEnd(seg) {
// TODO: move this to identifyJoints if used always.
let end = (seg.count_left > seg.count_right) ? seg.far_left : seg.far_right;
const jl = seg.far_left.hasOwnProperty("joint");
const jr = seg.far_right.hasOwnProperty("joint");
if (jl && !jr)
end = seg.far_right;
else if (jr && !jl)
end = seg.far_left;
if (!end.distance2D) {
const x = end.x - seg.x;
const y = end.y - seg.y;
end.distance2D = Math.sqrt(x * x + y * y);
}
return end;
}
}
var video_loaded = false;
function handleError(error) {
if (error.name == 'TrackStartError' || error.name == 'UnsupportedSizeError') {
return reload();
}
if (error.name == "OverconstrainedError" && error.constraint == "videoKind")
return console.error("No device with \"videoKind == depth\" capture available.");
console.error(error);
}
// Offscreen |video| we use to upload depth content to WebGL texture.
let init_done = false;
let video_last_upload_time = -1;
let video = createDepthVideo();
function createDepthVideo() {
var video = document.createElement("video");
video.autoplay = true;
video.loop = true;
video.crossOrigin = "anonymous";
video.width = 640;
video.height = 480;
video.oncanplay = function(){
video_loaded=true;
init_done = false;
};
return video;
}
function reload() {
if (window.stream) {
window.stream.getTracks().forEach(function(track) {
track.stop();
});
}
function streamOpened(stream) {
video.srcObject = stream;
window.stream = stream;
video_loaded = false;
init_done = false;
retrycount = 2;
};
DepthCamera.getDepthStream().then(streamOpened).catch(handleError);
}
function putReadPixelsToTestCanvas(testContext) {
if (testContext == undefined)
return;
const img = testContext.getImageData(0, 0, video.width, video.height);
const data = img.data;
const segment_data = out.segment_data;
for (let i = 0, j = 0; i < data.length; i += 4) {
let val = tf_output[i / 4];
let depth = val > 0.0 ? 110 : (modf(-val) * 1200);
if (val < 0 && links[i / 4] != -1)
depth = 60; // visited points.
data[i] = depth;
data[i + 1] = depth;
data[i + 1] = depth;
if (val > -1)
data[i + 2] = depth;
else
data[i + 2] = 0;
data[i+3] = 255;
}
testContext.putImageData(img, 0, 0);
// draw the connected segments
testContext.strokeStyle="#00FF00";
let keys = Object.keys(segment_data);
for (let k = 0; k < keys.length; k++) {
const keystring = keys[k];
const segment = segment_data[keystring];
const index = parseInt(keystring);
let strokeStyle = "#00FF00";
if (segment.hasOwnProperty("discarded"))
strokeStyle="#FF0000";
const column = index % width;
const row = Math.floor(index / width);
if (column !== segment.x && row !== segment.y)
console.log("error column/row wrong");
let item = segment.far_left;
if (item.index !== undefined) {
if (item.hasOwnProperty("joint"))
testContext.strokeStyle = "#AAAA00";
else
testContext.strokeStyle = strokeStyle;
testContext.beginPath();
testContext.fillStyle="#FFFF00";
testContext.fillRect(column, row, 2, 2);
if (item.hasOwnProperty("x_original")) {
testContext.fillStyle="#007F7F";
testContext.fillRect(item.x_original, item.y_original, 2, 2);
testContext.fillStyle="#FFFFFF";
} else {
testContext.fillStyle="#0000FF";
}
testContext.fillRect(item.x, item.y, 2, 2);
testContext.moveTo(column, row);
testContext.lineTo(item.x, item.y);
testContext.stroke();
}
item = segment.far_right;
if (item.index !== undefined) {
if (item.hasOwnProperty("joint"))
testContext.strokeStyle="#AAAA00";
else
testContext.strokeStyle = strokeStyle;
testContext.beginPath();
testContext.moveTo(column, row);
testContext.lineTo(item.x, item.y);
if (item.hasOwnProperty("x_original")) {
testContext.fillStyle="#7F7F00";
testContext.fillRect(item.x_original, item.y_original, 2, 2);
testContext.fillStyle="#FFFFFF";
} else {
testContext.fillStyle="#FF0000";
}
testContext.fillRect(item.x, item.y, 2, 2);
testContext.stroke();
}
// Draw joints
// testContext.fillStyle="#FF0000";
// testContext.fillRect(column, row, 2, 2);
// testContext.stroke();
}
const img1 = testContext.getImageData(0, 0, video.width, video.height);
testContext.putImageData(img1, 0, 0);
}
// Creates WebGL/WebGL2 context used to upload depth video to texture.
function initGL(gl, drawGL) {
// EXT_color_buffer_float to use single component R32F texture format.
gl.color_buffer_float_ext = gl.getExtension('EXT_color_buffer_float');
gl.WEBGL_get_buffer_sub_data_async = gl.getExtension("WEBGL_get_buffer_sub_data_async");
if (drawGL) {
drawGL.color_buffer_float_ext = drawGL.getExtension('EXT_color_buffer_float') ||
drawGL.getExtension('OES_texture_float');
}
if (!gl || !gl.color_buffer_float_ext) {
alert("The depth capture demo doesn't run because it requires WebGL2 support with EXT_color_buffer_float.");
return;
}
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
// Transform feedback vertex shader is used for detecting "finger skeleton"
// candidate points. Passes the result as "out depth": if depth is > 1.0 then
// the CPU side of algorithm collects nearby skeleton points to segments.
var tf_vertex_shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(tf_vertex_shader, `#version 300 es
uniform sampler2D s_depth;
uniform vec2 u_depth_size;
uniform vec2 u_plane;
uniform float finger_half_width;
uniform float xz_flip;
out float depth;
void main() {
vec2 depth_pixel;
depth_pixel.x = mod(float(gl_VertexID), u_depth_size.x) + 0.5;
depth_pixel.y = clamp(floor(float(gl_VertexID) / u_depth_size.x),
0.0, u_depth_size.y) + 0.5;
vec2 tex_pos = depth_pixel / u_depth_size;
// If camera faces towards user, mirror the display.
if (xz_flip != 0.0)
tex_pos.x = 1.0 - tex_pos.x;
depth = texture(s_depth, tex_pos).r;
if (depth <= u_plane.x || depth >= u_plane.y) {
depth = 0.0;
return;
}
vec2 step = vec2(1.0, 1.0) / u_depth_size;
float d_0;
float d_90;
float d_180;
float d_270;
// Calculate max_width of the finger at the given distance. Asuming that finger is
// wider than ~0.6cm, min_width_half is width (in pixels) related to 0.3 cm.
float min_width_half = finger_half_width / depth;
float max_width_half = min_width_half * 6.0;
// Sample around and increase the distance of samples to the point.
// The idea is that on distance D all the samples are inside the area
// but on the distance D + 3, 3 or 4 out of 4 are outside the area. This
// would make the point "fingertip point" (e.g part of the skeleton) for
// the area.
float width_step = min_width_half * 0.8;
float inside_count = 4.0;
float k = 0.0;
float s_y = 1.0;
float s_x = 1.0;
float i = max(min_width_half * 0.19, 1.0); // 0.19 + 0.8 = 0.99, check k.
for (; i < max_width_half; i += width_step, k++) {
d_0 = texture(s_depth, tex_pos + vec2( i, 0.0) * step).r;
d_90 = texture(s_depth, tex_pos - vec2( 0.0, i) * step).r;
d_180 = texture(s_depth, tex_pos - vec2( i, 0.0) * step).r;
d_270 = texture(s_depth, tex_pos + vec2( 0.0, i) * step).r;
if (d_0 * d_90 * d_180 * d_270 == 0.0) {
s_x = sign(d_0) + sign(d_180);
s_y = sign(d_90) + sign(d_270);
inside_count = s_x + s_y;
break;
}
}
// k > 2.0 serves to eliminate "thin" areas. We pass depth > 0 through
// transform feedback, so that CPU side of algorithm would understands
// that this point is "part of finger bone" point and process it further.
if (k > 2.0 && inside_count <= 1.0) {
depth = depth + k;
return;
} else if (k > 2.0 && inside_count == 2.0 && (s_x * s_y == 0.0))
return;
// We also need large areas info as they are modeled using circles - as a
// net of pearls.
depth = -depth;
if (inside_count > 3.0)
depth -= 1.0;
}`
);
gl.compileShader(tf_vertex_shader);
var tf_dummy_pixel_shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(tf_dummy_pixel_shader, `#version 300 es
precision mediump float;
in float depth;
void main() {
}`
);
gl.compileShader(tf_dummy_pixel_shader);
var compute_program = gl.createProgram();
gl.attachShader(compute_program, tf_vertex_shader);
gl.attachShader(compute_program, tf_dummy_pixel_shader);
gl.transformFeedbackVaryings(compute_program, ["depth"], gl.SEPARATE_ATTRIBS);
gl.linkProgram(compute_program);
console.log(gl.getShaderInfoLog(tf_vertex_shader));
gl.useProgram(compute_program);
gl.depth_vao = gl.createVertexArray();
gl.bindVertexArray(gl.depth_vao);
// To restore state of vertex attrib arrays
const vattrib_count = Math.min(32, gl.getParameter(gl.MAX_VERTEX_ATTRIBS));
for (let i = 0; i < vattrib_count; i++)
gl.disableVertexAttribArray(i);
gl.bindVertexArray(null);
var tf_bo = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, tf_bo);
var transform_feedback = gl.createTransformFeedback();
gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, transform_feedback)
gl.uniform1i(gl.getUniformLocation(compute_program, "s_depth"), gl.depth_tex_unit - gl.TEXTURE0);
gl.compute_u_xz_flip = gl.getUniformLocation(compute_program, "xz_flip");
gl.uniform1i(gl.compute_u_xz_flip, 0);
// 3D Pointcloud rendering.
var vertex_shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertex_shader, `#version 300 es
precision mediump float;
// Run a vertex shader instance for each depth data point to create
// 3D model of the data (pointcloud).
////////////////////////////////////////////////////////////////////
// Parameters of the currently used camera, see
// https://github.com/IntelRealSense/librealsense/blob/master/doc/projection.md
// and the documentation at
// https://w3c.github.io/mediacapture-depth/#synchronizing-depth-and-color-video-rendering
// Used to convert the raw depth data into meters.
// Corresponds to rs_get_device_depth_scale() in librealsense.
uniform float u_depth_scale;
// Center of projection of the depth camera data.
uniform vec2 u_depth_offset;
// Focal length of the depth data.
uniform vec2 u_depth_focal_length_inv;
////////////////////////////////////////////////////////////////////
// Model-View-Projection matrix.
uniform mat4 u_mvp;
uniform mat4 u_mvp_from_light;
uniform float u_draw_lighting;
uniform float u_pointSize;
uniform float xz_flip;
uniform sampler2D u_depth_texture;
// Width and height of the depth data.
uniform vec2 u_depth_texture_size;
out vec3 v_normal;
out vec3 v_position;
out vec4 v_position_from_light;
// Convert the index of the depth data (ranged from [0, 0] to
// [u_depth_texture_size.x, u_depth_texture_size.y]) into a position
// in 3D space. The depth parameter needs to be in meters.
// This should be equivalent to what rs_deproject_pixel_to_point()
// in librealsense does.
vec4 depth_deproject(vec2 index, float depth) {
vec2 position2d = (index - u_depth_offset) * u_depth_focal_length_inv;
return vec4(position2d * depth, depth, 1.0);
}
void main() {
// Get the texture coordinates in range from [0, 0] to [1, 1]
vec2 depth_pixel;
depth_pixel.x = mod(float(gl_VertexID), u_depth_texture_size.x) + 0.5;
depth_pixel.y = clamp(floor(float(gl_VertexID) / u_depth_texture_size.x),
0.0, u_depth_texture_size.y) + 0.5;
vec2 depth_texture_coord = depth_pixel / u_depth_texture_size;
if (xz_flip != 0.0)
depth_texture_coord.x = 1.0 - depth_texture_coord.x;
// The values of R, G and B should be equal, so we can just
// select any of them.
float depth = texture(u_depth_texture,
depth_texture_coord).r;
if (depth == 0.0)
return;
// For example, a value of 1.5 means the current point is 1.5
// meters away.
float depth_scaled = u_depth_scale * depth;
// X and Y are the position within the depth texture (adjusted
// so that it matches the position of the RGB texture), Z is
// the depth.
vec4 position = depth_deproject(depth_pixel,
depth_scaled);
if (u_draw_lighting != 0.0) {
// Calculate normal based on surrounding pixels.
vec2 stepx = vec2(1.0, 0.0) / u_depth_texture_size;
vec2 stepy = vec2(0.0, 1.0) / u_depth_texture_size;
float d_0 = texture(u_depth_texture, depth_texture_coord + stepx).r;
float d_90 = texture(u_depth_texture, depth_texture_coord + stepy).r;
float d_180 = texture(u_depth_texture, depth_texture_coord - stepx).r;
float d_270 = texture(u_depth_texture, depth_texture_coord - stepy).r;
// Edges are tricky, for 0 depth pixels on edges, don't render.
// if (d_0 * d_90 * d_180 * d_270 == 0.0)
// return;
float ddx = (d_0 - d_180) * 0.5;
float ddy = (d_90 - d_270) * 0.5;
v_normal = vec3(ddx, ddy, depth * u_depth_focal_length_inv.x);
v_position_from_light = u_mvp_from_light * position;
}
v_position = vec3(position);
gl_Position = u_mvp * position;
gl_PointSize = u_pointSize;
}`
);
gl.compileShader(vertex_shader);
var pixel_shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(pixel_shader, `#version 300 es
precision mediump float;
precision highp sampler2DShadow;
uniform sampler2DShadow u_shadow_map;
uniform float u_draw_lighting;
uniform vec3 u_light_position;
in vec3 v_normal;
in vec3 v_position;
in vec4 v_position_from_light;
out vec4 fragColor;
void main() {
if (u_draw_lighting != 1.0)
return;
vec3 s = (v_position_from_light.xyz / v_position_from_light.w) * 0.5 + 0.49;
float shadow = texture(u_shadow_map, s);
vec3 normal = normalize(v_normal);
vec3 to_eye = normalize(-v_position); // eye is in 0,0,0
// TODO: to_eye shouldnt be hardcoded.
vec3 to_light = normalize(vec3(0.7, -3.0, 1.0) - v_position);
// no specular component for hands.
float diffuse = shadow * max(dot(to_light, normal), 0.0) * 0.7;
float ambient = 0.3;
fragColor = vec4(vec3(0.9, 0.9, 0.9) * (diffuse + ambient), 1.0);
}`
);
gl.compileShader(pixel_shader);
var program = gl.createProgram();
gl.attachShader(program, vertex_shader);
gl.attachShader(program, pixel_shader);
gl.linkProgram(program);
console.log(gl.getShaderInfoLog(vertex_shader));
console.log(gl.getShaderInfoLog(pixel_shader));
console.log(gl.getProgramInfoLog(program));
gl.useProgram(program);
gl.uniform1i(gl.getUniformLocation(program, "u_depth_texture"), 0);
gl.render_u_mvp = gl.getUniformLocation(program, "u_mvp");
gl.u_mvp_from_light = gl.getUniformLocation(program, "u_mvp_from_light");
gl.u_draw_lighting = gl.getUniformLocation(program, "u_draw_lighting");
gl.render_u_pointSize = gl.getUniformLocation(program, "u_pointSize");
gl.render_u_light_position = gl.getUniformLocation(program, "u_light_position");
gl.render_u_shadow_map = gl.getUniformLocation(program, "u_shadow_map");
gl.render_u_xz_flip = gl.getUniformLocation(program, "xz_flip");
gl.uniform1i(gl.render_u_xz_flip, 0);
function createDepthTexture(gl) {
var depth_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, depth_texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
return depth_texture;
};
// Upload the latest depth frame to this texture.
gl.depth_texture = createDepthTexture(gl);
if (drawGL)
drawGL.depth_texture = createDepthTexture(drawGL);
gl.render_program = program;
gl.compute_program = compute_program;
gl.transform_feedback = transform_feedback;
gl.tf_bo = tf_bo;
}
function getMvpMatrix(screenwidth, screenheight) {
var model = new mat4.create();
var view = new mat4.create();
mat4.lookAt(view,
vec3.fromValues(0, 0, 0), // eye
vec3.fromValues(0, 0, 0.4), // target
vec3.fromValues(0, -1, 0)); // up
var aspect = screenwidth / screenheight;
var projection = new mat4.create();
mat4.perspective(projection, glMatrix.toRadian(60.0), aspect, 0.1, 20.0);
var mv = mat4.create();
mat4.multiply(mv, view, model);
var mvp = mat4.create();
mat4.multiply(mvp, projection, mv);
mat4.scale(mvp, mvp, [1.1, 1.1, 1]);
return mvp;
}
let u_plane;
let tf_output;
// Analysis intermediate data.
// If != -1, marking that the point is connected to subsegment starting point,
// and the value is sub-segment starting point's index. Only skeleton points
// are procesed in the algorithm (speed concern) and only those have the values
// != -1 - see markConnectedPoints.
let links;
let out;
let out1;
let out2;
let width;
let height;
// The max length of a finger segment - determines the radius of circular
// propagation using generate_concentric_circles_indices.js (5 cm)
let segment_coef;
function processOnCPU() {
links.fill(-1);
segment_farthest_point_map_left = {};
segment_farthest_point_map_right = {};
const segment_data = {};
const net_inv = INTERPOLATE_INV;
const netw = Math.ceil(width * net_inv);
const neth = Math.ceil(height * net_inv);
const net = (out ? out.net : new Array(netw * neth)).fill(-1);
// We limit the gesture processing to area of the screen with margins 60 for
// screen size 640x480. This is to avoid the need of checking against the
// screen bounds.
const x_offset = Math.min(radius_offset.length, (width * 0.1) | 0, (height * 0.125) | 0);
const y_offset = x_offset;
const max_radius = x_offset;
let x_count = width - (2 * x_offset);
let y_end = height - y_offset;
for (let row = y_offset; row < y_end; row++) {
const row_offset = row * width;
let x = row_offset + x_offset;
const x_end = x + x_count;
for (; x < x_end; ++x) {
const value = tf_output[x];
if (value < -1) {
// Maintain the net of wide areas.
const column = x - row_offset;
const ncol = (column * net_inv) | 0;
const nrow = (row * net_inv) | 0;
const ni = netw * nrow + ncol;
if (net[ni] == -1)
net[ni] = (column << 16) | row;
continue;
} else if (value <= 0.0) {
continue; // Far away pixel if 0, or pixel that is not on a bone if < 0.
}
if (links[x] > -1)
continue; // If already on a segment.
const depth = modf(value);
// Convert hand size from cm to pixels on given depth.
const radius = Math.min(max_radius, segment_coef / depth * 0.8);
markConnectedPoints(x, x - row_offset, row, radius, segment_data);
}
}
out2 = out1;
out1 = out;
out = {segment_data: segment_data, net: net, netw: netw, neth: neth};
}
function markConnectedPoints(index, column, row, radius, segment_data) {
connected.fill(false);
connected[0] = true;
links[index] = index;
// farthest index left and right.
let farthest_index_left = {index: index, x: column, y: row, center: {x: -1, y: -1}};
let farthest_index_right = {index: index, x: column, y: row, center: {x: -1, y: -1}};
let count_left = 0;
let count_right = 0;
for (var j = 1; j < radius; j++) {
let had_connection_on_radius = false; // Don't go further if there are no points to connect.
const count_on_this_radius = count_per_radius[j];
// generate_concentric_circles_indices.js generates full circle, and we want
// to only go through lower half of the circle.
const r_start = radius_offset[j] + (count_on_this_radius >> 2);
const r_end = r_start + 1 + (count_on_this_radius >> 1);
for (var i = r_start; i < r_end; i++) {
const element_towards_center = towards_center[i];
// We get the index of element towards center. If the point is not
// connected to the center, don't bother analyzing it.
if (!connected[element_towards_center])
continue;
let elem = index + xs[i] + ys[i] * width;
const x_offset = xs[i];
const y_offset = ys[i];
let l = tf_output[elem];
if (l != 0.0) {
connected[i] = true;
had_connection_on_radius = true;
const x = column + x_offset;
const y = row + y_offset;
if (links[elem] > -1) {
// continue as the point is already allocated to other segment.
continue;
}
links[elem] = index;
if (l < 0.0)
continue; // The pixel is not on the finger bone.
// Track the farthest indices to the left and to the right.
if (x_offset < 0) {
if (l > 1.0) {
farthest_index_left.center.x = x;
farthest_index_left.center.y = y;
}
farthest_index_left.index = elem;
farthest_index_left.x = x;
farthest_index_left.y = y;
count_left++;
} else {
if (l > 1.0) {
farthest_index_right.center.x = x;
farthest_index_right.center.y = y;
}
farthest_index_right.index = elem;
farthest_index_right.x = x;
farthest_index_right.y = y;
count_right++;
}
}
}
if (!had_connection_on_radius)
break;
}
let data = {x:column, y:row, index: index, far_left: farthest_index_left,
far_right: farthest_index_right, count_left: count_left,
count_right: count_right, depth: modf(tf_output[index])};
farthest_index_left.depth = modf(tf_output[farthest_index_left.index]);
farthest_index_right.depth = modf(tf_output[farthest_index_right.index]);
segment_data[index] = data;
}
function modf(v) {
return v - (v | 0);
}
// Generated using generate_concentric_circles_indices.js for kernel 60.
// This is used to enumerate through points on the same distance from the center,
// similar to spreading of vawes of concentric circles and for each point of
// the circle, use towards_center to calculate if the point is connected to the
// center.
var xs = [0,0,1,1,1,0,-1,-1,-1,0,1,2,2,2,2,2,1,0,-1,-2,-2,-2,-2,-2,-1,0,1,2,3,3,3,3,3,2,1,0,-1,-2,-3,-3,-3,-3,-3,-2,-1,0,1,2,3,4,4,4,4,4,3,2,1,0,-1,-2,-3,-4,-4,-4,-4,-4,-3,-2,-1,0,1,2,3,3,4,4,5,5,5,5,5,5,5,4,4,3,3,2,1,0,-1,-2,-3,-3,-4,-4,-5,-5,-5,-5,-5,-5,-5,-4,-4,-3,-3,-2,-1,0,1,2,3,4,5,6,6,6,6,6,6,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-6,-6,-6,-6,-6,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,5,6,6,7,7,7,7,7,7,7,6,6,5,5,4,3,2,1,0,-1,-2,-3,-4,-5,-5,-6,-6,-7,-7,-7,-7,-7,-7,-7,-6,-6,-5,-5,-4,-3,-2,-1,0,1,2,3,4,4,5,6,7,7,8,8,8,8,8,8,8,8,8,7,7,6,5,4,4,3,2,1,0,-1,-2,-3,-4,-4,-5,-6,-7,-7,-8,-8,-8,-8,-8,-8,-8,-8,-8,-7,-7,-6,-5,-4,-4,-3,-2,-1,0,1,2,3,4,5,6,7,7,8,9,9,9,9,9,9,9,9,9,8,7,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-7,-8,-9,-9,-9,-9,-9,-9,-9,-9,-9,-8,-7,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,6,7,8,8,9,9,10,10,10,10,10,10,10,10,10,9,9,8,8,7,6,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-6,-7,-8,-8,-9,-9,-10,-10,-10,-10,-10,-10,-10,-10,-10,-9,-9,-8,-8,-7,-6,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,11,11,11,11,11,11,11,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-11,-11,-11,-11,-11,-11,-11,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,12,12,12,12,12,11,11,10,10,9,9,8,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-8,-9,-9,-10,-10,-11,-11,-12,-12,-12,-12,-12,-12,-12,-12,-12,-11,-11,-10,-10,-9,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,5,6,7,7,8,9,10,11,11,12,12,12,13,13,13,13,13,13,13,13,13,13,13,12,12,12,11,11,10,9,8,7,7,6,5,5,4,3,2,1,0,-1,-2,-3,-4,-5,-5,-6,-7,-7,-8,-9,-10,-11,-11,-12,-12,-12,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-12,-12,-12,-11,-11,-10,-9,-8,-7,-7,-6,-5,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,11,12,13,13,14,14,14,14,14,14,14,14,14,14,14,13,13,12,11,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-11,-12,-13,-13,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-13,-13,-12,-11,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,9,10,11,12,12,13,13,14,14,15,15,15,15,15,15,15,15,15,15,15,14,14,13,13,12,12,11,10,9,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-9,-10,-11,-12,-12,-13,-13,-14,-14,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-15,-14,-14,-13,-13,-12,-12,-11,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,12,13,14,14,15,15,16,16,16,16,16,16,16,16,16,16,16,15,15,14,14,13,12,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-12,-13,-14,-14,-15,-15,-16,-16,-16,-16,-16,-16,-16,-16,-16,-16,-16,-15,-15,-14,-14,-13,-12,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,8,9,10,11,11,12,13,13,14,14,15,15,16,16,16,17,17,17,17,17,17,17,17,17,17,17,16,16,16,15,15,14,14,13,13,12,11,11,10,9,8,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-8,-9,-10,-11,-11,-12,-13,-13,-14,-14,-15,-15,-16,-16,-16,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-17,-16,-16,-16,-15,-15,-14,-14,-13,-13,-12,-11,-11,-10,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,6,7,8,9,10,10,11,12,13,14,15,15,16,16,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,17,17,17,16,16,15,15,14,13,12,11,10,10,9,8,7,6,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-6,-7,-8,-9,-10,-10,-11,-12,-13,-14,-15,-15,-16,-16,-17,-17,-17,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-18,-17,-17,-17,-16,-16,-15,-15,-14,-13,-12,-11,-10,-10,-9,-8,-7,-6,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,14,15,15,16,17,17,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,18,18,17,17,16,15,15,14,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-14,-15,-15,-16,-17,-17,-18,-18,-19,-19,-19,-19,-19,-19,-19,-19,-19,-19,-19,-19,-19,-18,-18,-17,-17,-16,-15,-15,-14,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,12,13,14,15,16,16,17,17,18,18,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,19,19,18,18,17,17,16,16,15,14,13,12,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-12,-13,-14,-15,-16,-16,-17,-17,-18,-18,-19,-19,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-20,-19,-19,-18,-18,-17,-17,-16,-16,-15,-14,-13,-12,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,9,10,11,11,12,13,14,15,15,16,16,17,18,18,19,19,19,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,19,19,19,18,18,17,16,16,15,15,14,13,12,11,11,10,9,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-9,-10,-11,-11,-12,-13,-14,-15,-15,-16,-16,-17,-18,-18,-19,-19,-19,-20,-20,-20,-21,-21,-21,-21,-21,-21,-21,-21,-21,-21,-21,-21,-21,-20,-20,-20,-19,-19,-19,-18,-18,-17,-16,-16,-15,-15,-14,-13,-12,-11,-11,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,15,16,17,17,18,18,19,20,20,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,21,21,21,20,20,19,18,18,17,17,16,15,14,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-14,-15,-16,-17,-17,-18,-18,-19,-20,-20,-21,-21,-21,-22,-22,-22,-22,-22,-22,-22,-22,-22,-22,-22,-22,-22,-21,-21,-21,-20,-20,-19,-18,-18,-17,-17,-16,-15,-14,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,19,20,20,21,21,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,21,21,20,20,19,19,18,17,16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-15,-16,-17,-18,-19,-19,-20,-20,-21,-21,-22,-22,-22,-23,-23,-23,-23,-23,-23,-23,-23,-23,-23,-23,-23,-23,-22,-22,-22,-21,-21,-20,-20,-19,-19,-18,-17,-16,-15,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,17,18,18,19,19,20,21,21,22,22,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,22,22,21,21,20,19,19,18,18,17,17,16,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-16,-17,-17,-18,-18,-19,-19,-20,-21,-21,-22,-22,-23,-23,-23,-24,-24,-24,-24,-24,-24,-24,-24,-24,-24,-24,-24,-24,-23,-23,-23,-22,-22,-21,-21,-20,-19,-19,-18,-18,-17,-17,-16,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,7,8,9,10,11,12,12,13,14,15,15,16,17,18,19,20,20,21,21,22,22,23,23,23,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,23,23,23,22,22,21,21,20,20,19,18,17,16,15,15,14,13,12,12,11,10,9,8,7,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-7,-8,-9,-10,-11,-12,-12,-13,-14,-15,-15,-16,-17,-18,-19,-20,-20,-21,-21,-22,-22,-23,-23,-23,-24,-24,-24,-25,-25,-25,-25,-25,-25,-25,-25,-25,-25,-25,-25,-25,-25,-25,-24,-24,-24,-23,-23,-23,-22,-22,-21,-21,-20,-20,-19,-18,-17,-16,-15,-15,-14,-13,-12,-12,-11,-10,-9,-8,-7,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,14,15,16,17,18,18,19,19,20,20,21,22,22,23,23,24,24,24,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,25,24,24,24,23,23,22,22,21,20,20,19,19,18,18,17,16,15,14,14,13,12,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-12,-13,-14,-14,-15,-16,-17,-18,-18,-19,-19,-20,-20,-21,-22,-22,-23,-23,-24,-24,-24,-25,-25,-25,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-26,-25,-25,-25,-24,-24,-24,-23,-23,-22,-22,-21,-20,-20,-19,-19,-18,-18,-17,-16,-15,-14,-14,-13,-12,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,21,21,22,22,23,24,24,25,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,24,24,23,22,22,21,21,20,19,18,17,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-20,-21,-21,-22,-22,-23,-24,-24,-25,-25,-26,-26,-26,-27,-27,-27,-27,-27,-27,-27,-27,-27,-27,-27,-27,-27,-27,-27,-26,-26,-26,-25,-25,-24,-24,-23,-22,-22,-21,-21,-20,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,18,19,20,21,22,23,23,24,24,25,25,26,26,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,27,26,26,25,25,24,24,23,23,22,21,20,19,18,17,16,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-16,-17,-18,-19,-20,-21,-22,-23,-23,-24,-24,-25,-25,-26,-26,-27,-27,-27,-28,-28,-28,-28,-28,-28,-28,-28,-28,-28,-28,-28,-28,-28,-28,-27,-27,-27,-26,-26,-25,-25,-24,-24,-23,-23,-22,-21,-20,-19,-18,-17,-16,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,19,20,20,21,21,22,22,23,23,24,25,25,26,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,27,27,27,26,26,25,25,24,23,23,22,22,21,21,20,20,19,19,18,17,16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-15,-16,-17,-18,-19,-19,-20,-20,-21,-21,-22,-22,-23,-23,-24,-25,-25,-26,-26,-27,-27,-27,-28,-28,-28,-29,-29,-29,-29,-29,-29,-29,-29,-29,-29,-29,-29,-29,-29,-29,-28,-28,-28,-27,-27,-27,-26,-26,-25,-25,-24,-23,-23,-22,-22,-21,-21,-20,-20,-19,-19,-18,-17,-16,-15,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,16,17,18,18,19,20,21,22,23,24,24,25,25,26,26,27,27,28,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,28,27,27,26,26,25,25,24,24,23,22,21,20,19,18,18,17,16,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-15,-16,-17,-18,-18,-19,-20,-21,-22,-23,-24,-24,-25,-25,-26,-26,-27,-27,-28,-28,-28,-29,-29,-29,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-29,-29,-29,-28,-28,-28,-27,-27,-26,-26,-25,-25,-24,-24,-23,-22,-21,-20,-19,-18,-18,-17,-16,-15,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,11,12,13,14,15,16,17,17,18,19,20,21,21,22,22,23,23,24,24,25,26,26,27,27,28,28,29,29,29,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,29,28,28,27,27,26,26,25,24,24,23,23,22,22,21,21,20,19,18,17,17,16,15,14,13,12,11,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-20,-21,-21,-22,-22,-23,-23,-24,-24,-25,-26,-26,-27,-27,-28,-28,-29,-29,-29,-30,-30,-30,-30,-31,-31,-31,-31,-31,-31,-31,-31,-31,-31,-31,-31,-31,-31,-31,-30,-30,-30,-30,-29,-29,-29,-28,-28,-27,-27,-26,-26,-25,-24,-24,-23,-23,-22,-22,-21,-21,-20,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,8,9,10,11,12,13,14,15,16,17,18,19,20,20,21,22,23,24,25,25,26,26,27,28,28,29,29,30,30,31,31,31,31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,31,31,31,31,30,30,29,29,28,28,27,26,26,25,25,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-20,-21,-22,-23,-24,-25,-25,-26,-26,-27,-28,-28,-29,-29,-30,-30,-31,-31,-31,-31,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-31,-31,-31,-31,-30,-30,-29,-29,-28,-28,-27,-26,-26,-25,-25,-24,-23,-22,-21,-20,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,19,20,21,22,23,23,24,24,25,25,26,27,27,28,28,29,29,30,30,31,31,32,32,32,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,32,32,32,31,31,30,30,29,29,28,28,27,27,26,25,25,24,24,23,23,22,21,20,19,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-19,-20,-21,-22,-23,-23,-24,-24,-25,-25,-26,-27,-27,-28,-28,-29,-29,-30,-30,-31,-31,-32,-32,-32,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-33,-32,-32,-32,-31,-31,-30,-30,-29,-29,-28,-28,-27,-27,-26,-25,-25,-24,-24,-23,-23,-22,-21,-20,-19,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,15,16,16,17,18,18,19,20,21,22,22,23,24,25,26,26,27,27,28,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,33,33,32,32,32,31,31,31,30,30,30,29,29,28,27,27,26,26,25,24,23,22,22,21,20,19,18,18,17,16,16,15,14,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-14,-15,-16,-16,-17,-18,-18,-19,-20,-21,-22,-22,-23,-24,-25,-26,-26,-27,-27,-28,-29,-29,-30,-30,-30,-31,-31,-31,-32,-32,-32,-33,-33,-33,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-34,-33,-33,-33,-32,-32,-32,-31,-31,-31,-30,-30,-30,-29,-29,-28,-27,-27,-26,-26,-25,-24,-23,-22,-22,-21,-20,-19,-18,-18,-17,-16,-16,-15,-14,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28,28,29,29,30,31,31,32,32,33,33,33,34,34,34,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,34,34,34,33,33,33,32,32,31,31,30,29,29,28,28,27,26,25,24,23,22,21,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-26,-27,-28,-28,-29,-29,-30,-31,-31,-32,-32,-33,-33,-33,-34,-34,-34,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-35,-34,-34,-34,-33,-33,-33,-32,-32,-31,-31,-30,-29,-29,-28,-28,-27,-26,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,21,22,23,24,24,25,25,26,26,27,27,28,28,29,30,30,31,31,32,32,33,33,34,34,34,35,35,35,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,35,35,35,34,34,34,33,33,32,32,31,31,30,30,29,28,28,27,27,26,26,25,25,24,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-20,-21,-22,-23,-24,-24,-25,-25,-26,-26,-27,-27,-28,-28,-29,-30,-30,-31,-31,-32,-32,-33,-33,-34,-34,-34,-35,-35,-35,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-36,-35,-35,-35,-34,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-28,-28,-27,-27,-26,-26,-25,-25,-24,-24,-23,-22,-21,-20,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,29,30,30,31,32,32,33,33,34,34,35,35,35,36,36,36,36,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,36,36,36,36,35,35,35,34,34,33,33,32,32,31,30,30,29,29,28,27,26,25,24,23,23,22,21,20,19,18,17,16,15,14,13,12,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-23,-24,-25,-26,-27,-28,-29,-29,-30,-30,-31,-32,-32,-33,-33,-34,-34,-35,-35,-35,-36,-36,-36,-36,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-37,-36,-36,-36,-36,-35,-35,-35,-34,-34,-33,-33,-32,-32,-31,-30,-30,-29,-29,-28,-27,-26,-25,-24,-23,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,19,20,21,22,22,23,24,25,26,26,27,27,28,28,29,29,30,31,31,32,32,33,33,34,34,34,35,35,35,36,36,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,37,36,36,35,35,35,34,34,34,33,33,32,32,31,31,30,29,29,28,28,27,27,26,26,25,24,23,22,22,21,20,19,19,18,17,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-19,-20,-21,-22,-22,-23,-24,-25,-26,-26,-27,-27,-28,-28,-29,-29,-30,-31,-31,-32,-32,-33,-33,-34,-34,-34,-35,-35,-35,-36,-36,-37,-37,-37,-37,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-38,-37,-37,-37,-37,-36,-36,-35,-35,-35,-34,-34,-34,-33,-33,-32,-32,-31,-31,-30,-29,-29,-28,-28,-27,-27,-26,-26,-25,-24,-23,-22,-22,-21,-20,-19,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,16,17,18,19,20,21,21,22,23,24,25,25,26,27,28,29,30,30,31,31,32,33,33,34,34,35,35,36,36,36,37,37,37,38,38,38,38,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,38,38,38,38,37,37,37,36,36,36,35,35,34,34,33,33,32,31,31,30,30,29,28,27,26,25,25,24,23,22,21,21,20,19,18,17,16,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-25,-26,-27,-28,-29,-30,-30,-31,-31,-32,-33,-33,-34,-34,-35,-35,-36,-36,-36,-37,-37,-37,-38,-38,-38,-38,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-39,-38,-38,-38,-38,-37,-37,-37,-36,-36,-36,-35,-35,-34,-34,-33,-33,-32,-31,-31,-30,-30,-29,-28,-27,-26,-25,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,24,25,26,27,28,29,30,31,32,32,33,33,34,35,35,36,36,37,37,38,38,38,39,39,39,39,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,39,39,39,39,38,38,38,37,37,36,36,35,35,34,33,33,32,32,31,30,29,28,27,26,25,24,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-24,-25,-26,-27,-28,-29,-30,-31,-32,-32,-33,-33,-34,-35,-35,-36,-36,-37,-37,-38,-38,-38,-39,-39,-39,-39,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-39,-39,-39,-39,-38,-38,-38,-37,-37,-36,-36,-35,-35,-34,-33,-33,-32,-32,-31,-30,-29,-28,-27,-26,-25,-24,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,27,28,28,29,29,30,30,31,31,32,32,33,34,34,35,35,36,36,37,37,38,38,39,39,39,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,40,40,40,40,39,39,39,38,38,37,37,36,36,35,35,34,34,33,32,32,31,31,30,30,29,29,28,28,27,27,26,25,24,23,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-23,-24,-25,-26,-27,-27,-28,-28,-29,-29,-30,-30,-31,-31,-32,-32,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-39,-40,-40,-40,-40,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-40,-40,-40,-40,-39,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-32,-32,-31,-31,-30,-30,-29,-29,-28,-28,-27,-27,-26,-25,-24,-23,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20,20,21,22,23,24,25,26,26,27,28,29,30,31,32,33,33,34,34,35,36,36,37,37,38,38,38,39,39,39,40,40,40,41,41,41,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,41,41,41,40,40,40,39,39,39,38,38,38,37,37,36,36,35,34,34,33,33,32,31,30,29,28,27,26,26,25,24,23,22,21,20,20,19,18,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-18,-19,-20,-20,-21,-22,-23,-24,-25,-26,-26,-27,-28,-29,-30,-31,-32,-33,-33,-34,-34,-35,-36,-36,-37,-37,-38,-38,-38,-39,-39,-39,-40,-40,-40,-41,-41,-41,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-41,-41,-41,-40,-40,-40,-39,-39,-39,-38,-38,-38,-37,-37,-36,-36,-35,-34,-34,-33,-33,-32,-31,-30,-29,-28,-27,-26,-26,-25,-24,-23,-22,-21,-20,-20,-19,-18,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,20,21,22,22,23,24,25,25,26,27,28,29,29,30,30,31,31,32,32,33,33,34,35,35,36,36,37,37,38,38,39,39,40,40,40,41,41,41,42,42,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42,42,41,41,41,40,40,40,39,39,38,38,37,37,36,36,35,35,34,33,33,32,32,31,31,30,30,29,29,28,27,26,25,25,24,23,22,22,21,20,19,18,17,16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-22,-23,-24,-25,-25,-26,-27,-28,-29,-29,-30,-30,-31,-31,-32,-32,-33,-33,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40,-40,-40,-41,-41,-41,-42,-42,-42,-42,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-42,-42,-42,-42,-41,-41,-41,-40,-40,-40,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-29,-28,-27,-26,-25,-25,-24,-23,-22,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,18,19,20,21,22,23,24,24,25,26,27,28,28,29,30,31,32,33,34,34,35,35,36,37,37,38,38,39,39,40,40,41,41,41,42,42,42,43,43,43,43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,43,43,43,43,42,42,42,41,41,41,40,40,39,39,38,38,37,37,36,35,35,34,34,33,32,31,30,29,28,28,27,26,25,24,24,23,22,21,20,19,18,17,16,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-16,-17,-18,-19,-20,-21,-22,-23,-24,-24,-25,-26,-27,-28,-28,-29,-30,-31,-32,-33,-34,-34,-35,-35,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-41,-42,-42,-42,-43,-43,-43,-43,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-43,-43,-43,-43,-42,-42,-42,-41,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-35,-35,-34,-34,-33,-32,-31,-30,-29,-28,-28,-27,-26,-25,-24,-24,-23,-22,-21,-20,-19,-18,-17,-16,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,32,33,33,34,35,36,36,37,37,38,39,39,40,40,41,41,42,42,43,43,43,44,44,44,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,44,44,44,43,43,43,42,42,41,41,40,40,39,39,38,37,37,36,36,35,34,33,33,32,32,31,30,29,28,27,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-27,-28,-29,-30,-31,-32,-32,-33,-33,-34,-35,-36,-36,-37,-37,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-43,-43,-44,-44,-44,-44,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-44,-44,-44,-44,-43,-43,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-37,-37,-36,-36,-35,-34,-33,-33,-32,-32,-31,-30,-29,-28,-27,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,26,27,28,29,30,30,31,31,32,33,34,34,35,35,36,36,37,38,38,39,39,40,40,41,41,42,42,42,43,43,44,44,44,45,45,45,45,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,45,45,45,45,44,44,44,43,43,42,42,42,41,41,40,40,39,39,38,38,37,36,36,35,35,34,34,33,32,31,31,30,30,29,28,27,26,26,25,24,23,22,21,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-26,-26,-27,-28,-29,-30,-30,-31,-31,-32,-33,-34,-34,-35,-35,-36,-36,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-42,-42,-43,-43,-44,-44,-44,-45,-45,-45,-45,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-45,-45,-45,-45,-44,-44,-44,-43,-43,-42,-42,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-36,-36,-35,-35,-34,-34,-33,-32,-31,-31,-30,-30,-29,-28,-27,-26,-26,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,19,20,21,22,23,23,24,25,26,27,28,29,29,30,31,32,33,34,35,36,37,37,38,38,39,40,40,41,41,42,42,43,43,43,44,44,44,45,45,45,46,46,46,46,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,46,46,46,46,45,45,45,44,44,44,43,43,43,42,42,41,41,40,40,39,38,38,37,37,36,35,34,33,32,31,30,29,29,28,27,26,25,24,23,23,22,21,20,19,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-19,-20,-21,-22,-23,-23,-24,-25,-26,-27,-28,-29,-29,-30,-31,-32,-33,-34,-35,-36,-37,-37,-38,-38,-39,-40,-40,-41,-41,-42,-42,-43,-43,-43,-44,-44,-44,-45,-45,-45,-46,-46,-46,-46,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-46,-46,-46,-46,-45,-45,-45,-44,-44,-44,-43,-43,-43,-42,-42,-41,-41,-40,-40,-39,-38,-38,-37,-37,-36,-35,-34,-33,-32,-31,-30,-29,-29,-28,-27,-26,-25,-24,-23,-23,-22,-21,-20,-19,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,25,26,27,28,28,29,30,31,32,32,33,33,34,34,35,35,36,36,37,37,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,45,46,46,46,47,47,47,47,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,47,47,47,47,46,46,46,45,45,45,44,44,43,43,42,42,41,41,40,40,39,39,38,37,37,36,36,35,35,34,34,33,33,32,32,31,30,29,28,28,27,26,25,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-25,-26,-27,-28,-28,-29,-30,-31,-32,-32,-33,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-45,-46,-46,-46,-47,-47,-47,-47,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-47,-47,-47,-47,-46,-46,-46,-45,-45,-45,-44,-44,-43,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-30,-29,-28,-28,-27,-26,-25,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,31,32,33,34,35,36,37,38,38,39,39,40,41,41,42,42,43,43,44,44,45,45,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,48,48,48,48,47,47,47,47,46,46,46,45,45,44,44,43,43,42,42,41,41,40,39,39,38,38,37,36,35,34,33,32,31,31,30,29,28,27,27,26,25,24,23,22,21,20,19,18,17,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-27,-28,-29,-30,-31,-31,-32,-33,-34,-35,-36,-37,-38,-38,-39,-39,-40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-46,-46,-47,-47,-47,-47,-48,-48,-48,-48,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-48,-48,-48,-48,-47,-47,-47,-47,-46,-46,-46,-45,-45,-44,-44,-43,-43,-42,-42,-41,-41,-40,-39,-39,-38,-38,-37,-36,-35,-34,-33,-32,-31,-31,-30,-29,-28,-27,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,14,15,16,17,18,19,20,21,22,22,23,24,25,26,27,28,29,30,30,31,32,33,34,34,35,35,36,36,37,37,38,38,39,40,40,41,41,42,43,43,44,44,45,45,46,46,46,47,47,48,48,48,48,49,49,49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,49,49,49,49,49,48,48,48,48,47,47,46,46,46,45,45,44,44,43,43,42,41,41,40,40,39,38,38,37,37,36,36,35,35,34,34,33,32,31,30,30,29,28,27,26,25,24,23,22,22,21,20,19,18,17,16,15,14,14,13,12,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-12,-13,-14,-14,-15,-16,-17,-18,-19,-20,-21,-22,-22,-23,-24,-25,-26,-27,-28,-29,-30,-30,-31,-32,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-40,-40,-41,-41,-42,-43,-43,-44,-44,-45,-45,-46,-46,-46,-47,-47,-48,-48,-48,-48,-49,-49,-49,-49,-49,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-49,-49,-49,-49,-49,-48,-48,-48,-48,-47,-47,-46,-46,-46,-45,-45,-44,-44,-43,-43,-42,-41,-41,-40,-40,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-32,-31,-30,-30,-29,-28,-27,-26,-25,-24,-23,-22,-22,-21,-20,-19,-18,-17,-16,-15,-14,-14,-13,-12,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,24,25,26,26,27,28,29,29,30,31,32,33,33,34,35,36,37,38,39,39,40,40,41,42,42,43,43,44,44,45,45,45,46,46,47,47,47,48,48,49,49,49,50,50,50,50,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,50,50,50,50,49,49,49,48,48,47,47,47,46,46,45,45,45,44,44,43,43,42,42,41,40,40,39,39,38,37,36,35,34,33,33,32,31,30,29,29,28,27,26,26,25,24,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-24,-25,-26,-26,-27,-28,-29,-29,-30,-31,-32,-33,-33,-34,-35,-36,-37,-38,-39,-39,-40,-40,-41,-42,-42,-43,-43,-44,-44,-45,-45,-45,-46,-46,-47,-47,-47,-48,-48,-49,-49,-49,-50,-50,-50,-50,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-50,-50,-50,-50,-49,-49,-49,-48,-48,-47,-47,-47,-46,-46,-45,-45,-45,-44,-44,-43,-43,-42,-42,-41,-40,-40,-39,-39,-38,-37,-36,-35,-34,-33,-33,-32,-31,-30,-29,-29,-28,-27,-26,-26,-25,-24,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,21,22,23,24,25,26,27,28,29,30,31,32,32,33,34,35,36,37,38,39,40,41,41,42,42,43,44,44,45,46,46,47,47,48,48,48,49,49,49,50,50,50,51,51,51,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51,51,51,51,50,50,50,49,49,49,48,48,48,47,47,46,46,45,44,44,43,42,42,41,41,40,39,38,37,36,35,34,33,32,32,31,30,29,28,27,26,25,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-41,-42,-42,-43,-44,-44,-45,-46,-46,-47,-47,-48,-48,-48,-49,-49,-49,-50,-50,-50,-51,-51,-51,-51,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-51,-51,-51,-51,-50,-50,-50,-49,-49,-49,-48,-48,-48,-47,-47,-46,-46,-45,-44,-44,-43,-42,-42,-41,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,28,29,30,31,31,32,33,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,43,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,50,51,51,51,52,52,52,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,52,52,52,52,51,51,51,50,50,50,49,49,48,48,47,47,46,46,45,45,44,44,43,43,42,41,41,40,40,39,39,38,38,37,37,36,36,35,35,34,33,32,31,31,30,29,28,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-28,-29,-30,-31,-31,-32,-33,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-43,-43,-44,-44,-45,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-50,-51,-51,-51,-52,-52,-52,-52,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-52,-52,-52,-52,-51,-51,-51,-50,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-45,-44,-44,-43,-43,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-33,-32,-31,-31,-30,-29,-28,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,30,31,32,33,34,34,35,36,37,38,39,40,41,42,42,43,43,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,51,52,52,52,53,53,53,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,53,53,53,52,52,52,51,51,51,50,50,49,49,48,48,47,47,46,46,45,45,44,43,43,42,42,41,40,39,38,37,36,35,34,34,33,32,31,30,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-30,-31,-32,-33,-34,-34,-35,-36,-37,-38,-39,-40,-41,-42,-42,-43,-43,-44,-45,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-51,-51,-51,-52,-52,-52,-53,-53,-53,-53,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-53,-53,-53,-53,-52,-52,-52,-51,-51,-51,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-45,-44,-43,-43,-42,-42,-41,-40,-39,-38,-37,-36,-35,-34,-34,-33,-32,-31,-30,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,23,24,25,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,37,38,38,39,39,40,40,41,41,42,42,43,44,44,45,45,46,47,47,48,48,49,49,49,50,50,50,51,51,51,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,54,54,54,54,53,53,53,53,52,52,52,51,51,51,50,50,50,49,49,49,48,48,47,47,46,45,45,44,44,43,42,42,41,41,40,40,39,39,38,38,37,37,36,35,34,33,33,32,31,30,29,28,27,27,26,25,25,24,23,23,22,21,20,19,18,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-18,-19,-20,-21,-22,-23,-23,-24,-25,-25,-26,-27,-27,-28,-29,-30,-31,-32,-33,-33,-34,-35,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-44,-44,-45,-45,-46,-47,-47,-48,-48,-49,-49,-49,-50,-50,-50,-51,-51,-51,-52,-52,-52,-53,-53,-53,-53,-54,-54,-54,-54,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-54,-54,-54,-54,-53,-53,-53,-53,-52,-52,-52,-51,-51,-51,-50,-50,-50,-49,-49,-49,-48,-48,-47,-47,-46,-45,-45,-44,-44,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-35,-34,-33,-33,-32,-31,-30,-29,-28,-27,-27,-26,-25,-25,-24,-23,-23,-22,-21,-20,-19,-18,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,29,30,31,32,32,33,34,35,36,36,37,38,39,40,41,42,43,43,44,44,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,52,53,53,54,54,54,54,55,55,55,55,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,55,55,55,55,54,54,54,54,53,53,52,52,52,51,51,50,50,49,49,48,48,47,47,46,46,45,44,44,43,43,42,41,40,39,38,37,36,36,35,34,33,32,32,31,30,29,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-29,-30,-31,-32,-32,-33,-34,-35,-36,-36,-37,-38,-39,-40,-41,-42,-43,-43,-44,-44,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-51,-51,-52,-52,-52,-53,-53,-54,-54,-54,-54,-55,-55,-55,-55,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-55,-55,-55,-55,-54,-54,-54,-54,-53,-53,-52,-52,-52,-51,-51,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-44,-44,-43,-43,-42,-41,-40,-39,-38,-37,-36,-36,-35,-34,-33,-32,-32,-31,-30,-29,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28,29,30,31,31,32,33,34,35,35,36,37,38,39,40,41,41,42,43,44,45,45,46,46,47,48,48,49,49,50,50,51,51,52,52,53,53,53,54,54,54,55,55,55,55,56,56,56,56,56,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,56,56,56,56,56,55,55,55,55,54,54,54,53,53,53,52,52,51,51,50,50,49,49,48,48,47,46,46,45,45,44,43,42,41,41,40,39,38,37,36,35,35,34,33,32,31,31,30,29,28,27,26,25,24,23,22,21,21,20,19,18,17,16,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-31,-32,-33,-34,-35,-35,-36,-37,-38,-39,-40,-41,-41,-42,-43,-44,-45,-45,-46,-46,-47,-48,-48,-49,-49,-50,-50,-51,-51,-52,-52,-53,-53,-53,-54,-54,-54,-55,-55,-55,-55,-56,-56,-56,-56,-56,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-56,-56,-56,-56,-56,-55,-55,-55,-55,-54,-54,-54,-53,-53,-53,-52,-52,-51,-51,-50,-50,-49,-49,-48,-48,-47,-46,-46,-45,-45,-44,-43,-42,-41,-41,-40,-39,-38,-37,-36,-35,-35,-34,-33,-32,-31,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,34,35,36,37,38,38,39,39,40,40,41,42,42,43,43,44,44,45,45,46,47,47,48,48,49,50,50,51,51,52,52,53,53,54,54,55,55,55,56,56,56,57,57,57,57,57,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,57,57,57,57,57,56,56,56,55,55,55,54,54,53,53,52,52,51,51,50,50,49,48,48,47,47,46,45,45,44,44,43,43,42,42,41,40,40,39,39,38,38,37,36,35,34,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-34,-35,-36,-37,-38,-38,-39,-39,-40,-40,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-47,-47,-48,-48,-49,-50,-50,-51,-51,-52,-52,-53,-53,-54,-54,-55,-55,-55,-56,-56,-56,-57,-57,-57,-57,-57,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-57,-57,-57,-57,-57,-56,-56,-56,-55,-55,-55,-54,-54,-53,-53,-52,-52,-51,-51,-50,-50,-49,-48,-48,-47,-47,-46,-45,-45,-44,-44,-43,-43,-42,-42,-41,-40,-40,-39,-39,-38,-38,-37,-36,-35,-34,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,26,27,28,28,29,30,31,32,33,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,47,48,49,49,50,50,51,51,52,52,53,53,53,54,54,54,55,55,56,56,56,57,57,57,58,58,58,58,58,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,58,58,58,58,58,57,57,57,56,56,56,55,55,54,54,54,53,53,53,52,52,51,51,50,50,49,49,48,47,47,46,46,45,44,43,42,41,40,39,38,37,37,36,35,34,33,33,32,31,30,29,28,28,27,26,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-26,-27,-28,-28,-29,-30,-31,-32,-33,-33,-34,-35,-36,-37,-37,-38,-39,-40,-41,-42,-43,-44,-45,-46,-46,-47,-47,-48,-49,-49,-50,-50,-51,-51,-52,-52,-53,-53,-53,-54,-54,-54,-55,-55,-56,-56,-56,-57,-57,-57,-58,-58,-58,-58,-58,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-58,-58,-58,-58,-58,-57,-57,-57,-56,-56,-56,-55,-55,-54,-54,-54,-53,-53,-53,-52,-52,-51,-51,-50,-50,-49,-49,-48,-47,-47,-46,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-37,-36,-35,-34,-33,-33,-32,-31,-30,-29,-28,-28,-27,-26,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1];
var ys = [0,-1,-1,0,1,1,1,0,-1,-2,-2,-2,-1,0,1,2,2,2,2,2,1,0,-1,-2,-2,-3,-3,-3,-2,-1,0,1,2,3,3,3,3,3,2,1,0,-1,-2,-3,-3,-4,-4,-4,-3,-2,-1,0,1,2,3,4,4,4,4,4,3,2,1,0,-1,-2,-3,-4,-4,-5,-5,-5,-5,-4,-4,-3,-3,-2,-1,0,1,2,3,3,4,4,5,5,5,5,5,5,5,4,4,3,3,2,1,0,-1,-2,-3,-3,-4,-4,-5,-5,-5,-6,-6,-6,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,6,6,6,6,6,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-6,-6,-7,-7,-7,-7,-6,-6,-5,-5,-4,-3,-2,-1,0,1,2,3,4,5,5,6,6,7,7,7,7,7,7,7,6,6,5,5,4,3,2,1,0,-1,-2,-3,-4,-5,-5,-6,-6,-7,-7,-7,-8,-8,-8,-8,-8,-7,-7,-6,-5,-4,-4,-3,-2,-1,0,1,2,3,4,4,5,6,7,7,8,8,8,8,8,8,8,8,8,7,7,6,5,4,4,3,2,1,0,-1,-2,-3,-4,-4,-5,-6,-7,-7,-8,-8,-8,-8,-9,-9,-9,-9,-9,-8,-7,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,7,8,9,9,9,9,9,9,9,9,9,8,7,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-7,-8,-9,-9,-9,-9,-10,-10,-10,-10,-10,-9,-9,-8,-8,-7,-6,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,6,7,8,8,9,9,10,10,10,10,10,10,10,10,10,9,9,8,8,7,6,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-6,-7,-8,-8,-9,-9,-10,-10,-10,-10,-11,-11,-11,-11,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,11,11,11,11,11,11,11,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-11,-11,-11,-12,-12,-12,-12,-12,-11,-11,-10,-10,-9,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,12,12,12,12,12,11,11,10,10,9,9,8,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-8,-9,-9,-10,-10,-11,-11,-12,-12,-12,-12,-13,-13,-13,-13,-13,-13,-12,-12,-12,-11,-11,-10,-9,-8,-7,-7,-6,-5,-5,-4,-3,-2,-1,0,1,2,3,4,5,5,6,7,7,8,9,10,11,11,12,12,12,13,13,13,13,13,13,13,13,13,13,13,12,12,12,11,11,10,9,8,7,7,6,5,5,4,3,2,1,0,-1,-2,-3,-4,-5,-5,-6,-7,-7,-8,-9,-10,-11,-11,-12,-12,-12,-13,-13,-13,-13,-13,-14,-14,-14,-14,-14,-14,-13,-13,-12,-11,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,11,12,13,13,14,14,14,14,14,14,14,14,14,14,14,13,13,12,11,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-11,-12,-13,-13,-14,-14,-14,-14,-14,-15,-15,-15,-15,-15,-15,-14,-14,-13,-13,-12,-12,-11,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,9,10,11,12,12,13,13,14,14,15,15,15,15,15,15,15,15,15,15,15,14,14,13,13,12,12,11,10,9,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-9,-10,-11,-12,-12,-13,-13,-14,-14,-15,-15,-15,-15,-15,-16,-16,-16,-16,-16,-16,-15,-15,-14,-14,-13,-12,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,12,13,14,14,15,15,16,16,16,16,16,16,16,16,16,16,16,15,15,14,14,13,12,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-12,-13,-14,-14,-15,-15,-16,-16,-16,-16,-16,-17,-17,-17,-17,-17,-17,-16,-16,-16,-15,-15,-14,-14,-13,-13,-12,-11,-11,-10,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,8,9,10,11,11,12,13,13,14,14,15,15,16,16,16,17,17,17,17,17,17,17,17,17,17,17,16,16,16,15,15,14,14,13,13,12,11,11,10,9,8,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-8,-9,-10,-11,-11,-12,-13,-13,-14,-14,-15,-15,-16,-16,-16,-17,-17,-17,-17,-17,-18,-18,-18,-18,-18,-18,-18,-17,-17,-17,-16,-16,-15,-15,-14,-13,-12,-11,-10,-10,-9,-8,-7,-6,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,6,7,8,9,10,10,11,12,13,14,15,15,16,16,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,17,17,17,16,16,15,15,14,13,12,11,10,10,9,8,7,6,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-6,-7,-8,-9,-10,-10,-11,-12,-13,-14,-15,-15,-16,-16,-17,-17,-17,-18,-18,-18,-18,-18,-18,-19,-19,-19,-19,-19,-19,-19,-18,-18,-17,-17,-16,-15,-15,-14,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,14,15,15,16,17,17,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,18,18,17,17,16,15,15,14,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-14,-15,-15,-16,-17,-17,-18,-18,-19,-19,-19,-19,-19,-19,-20,-20,-20,-20,-20,-20,-20,-19,-19,-18,-18,-17,-17,-16,-16,-15,-14,-13,-12,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,12,13,14,15,16,16,17,17,18,18,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,19,19,18,18,17,17,16,16,15,14,13,12,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-12,-13,-14,-15,-16,-16,-17,-17,-18,-18,-19,-19,-20,-20,-20,-20,-20,-20,-21,-21,-21,-21,-21,-21,-21,-20,-20,-20,-19,-19,-19,-18,-18,-17,-16,-16,-15,-15,-14,-13,-12,-11,-11,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,9,10,11,11,12,13,14,15,15,16,16,17,18,18,19,19,19,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,20,20,20,19,19,19,18,18,17,16,16,15,15,14,13,12,11,11,10,9,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-9,-10,-11,-11,-12,-13,-14,-15,-15,-16,-16,-17,-18,-18,-19,-19,-19,-20,-20,-20,-21,-21,-21,-21,-21,-21,-22,-22,-22,-22,-22,-22,-22,-21,-21,-21,-20,-20,-19,-18,-18,-17,-17,-16,-15,-14,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,15,16,17,17,18,18,19,20,20,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,21,21,21,20,20,19,18,18,17,17,16,15,14,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-14,-15,-16,-17,-17,-18,-18,-19,-20,-20,-21,-21,-21,-22,-22,-22,-22,-22,-22,-23,-23,-23,-23,-23,-23,-23,-22,-22,-22,-21,-21,-20,-20,-19,-19,-18,-17,-16,-15,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,19,20,20,21,21,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,22,22,22,21,21,20,20,19,19,18,17,16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-15,-16,-17,-18,-19,-19,-20,-20,-21,-21,-22,-22,-22,-23,-23,-23,-23,-23,-23,-24,-24,-24,-24,-24,-24,-24,-23,-23,-23,-22,-22,-21,-21,-20,-19,-19,-18,-18,-17,-17,-16,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,17,18,18,19,19,20,21,21,22,22,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,23,23,23,22,22,21,21,20,19,19,18,18,17,17,16,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-16,-17,-17,-18,-18,-19,-19,-20,-21,-21,-22,-22,-23,-23,-23,-24,-24,-24,-24,-24,-24,-25,-25,-25,-25,-25,-25,-25,-25,-24,-24,-24,-23,-23,-23,-22,-22,-21,-21,-20,-20,-19,-18,-17,-16,-15,-15,-14,-13,-12,-12,-11,-10,-9,-8,-7,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,7,8,9,10,11,12,12,13,14,15,15,16,17,18,19,20,20,21,21,22,22,23,23,23,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,23,23,23,22,22,21,21,20,20,19,18,17,16,15,15,14,13,12,12,11,10,9,8,7,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-7,-8,-9,-10,-11,-12,-12,-13,-14,-15,-15,-16,-17,-18,-19,-20,-20,-21,-21,-22,-22,-23,-23,-23,-24,-24,-24,-25,-25,-25,-25,-25,-25,-25,-26,-26,-26,-26,-26,-26,-26,-26,-25,-25,-25,-24,-24,-24,-23,-23,-22,-22,-21,-20,-20,-19,-19,-18,-18,-17,-16,-15,-14,-14,-13,-12,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,14,15,16,17,18,18,19,19,20,20,21,22,22,23,23,24,24,24,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,25,25,25,24,24,24,23,23,22,22,21,20,20,19,19,18,18,17,16,15,14,14,13,12,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-12,-13,-14,-14,-15,-16,-17,-18,-18,-19,-19,-20,-20,-21,-22,-22,-23,-23,-24,-24,-24,-25,-25,-25,-26,-26,-26,-26,-26,-26,-26,-27,-27,-27,-27,-27,-27,-27,-27,-26,-26,-26,-25,-25,-24,-24,-23,-22,-22,-21,-21,-20,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,21,21,22,22,23,24,24,25,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,24,24,23,22,22,21,21,20,19,18,17,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-20,-21,-21,-22,-22,-23,-24,-24,-25,-25,-26,-26,-26,-27,-27,-27,-27,-27,-27,-27,-28,-28,-28,-28,-28,-28,-28,-28,-27,-27,-27,-26,-26,-25,-25,-24,-24,-23,-23,-22,-21,-20,-19,-18,-17,-16,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,18,19,20,21,22,23,23,24,24,25,25,26,26,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,27,27,27,26,26,25,25,24,24,23,23,22,21,20,19,18,17,16,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-16,-17,-18,-19,-20,-21,-22,-23,-23,-24,-24,-25,-25,-26,-26,-27,-27,-27,-28,-28,-28,-28,-28,-28,-28,-29,-29,-29,-29,-29,-29,-29,-29,-28,-28,-28,-27,-27,-27,-26,-26,-25,-25,-24,-23,-23,-22,-22,-21,-21,-20,-20,-19,-19,-18,-17,-16,-15,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,19,20,20,21,21,22,22,23,23,24,25,25,26,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28,27,27,27,26,26,25,25,24,23,23,22,22,21,21,20,20,19,19,18,17,16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-15,-16,-17,-18,-19,-19,-20,-20,-21,-21,-22,-22,-23,-23,-24,-25,-25,-26,-26,-27,-27,-27,-28,-28,-28,-29,-29,-29,-29,-29,-29,-29,-30,-30,-30,-30,-30,-30,-30,-30,-29,-29,-29,-28,-28,-28,-27,-27,-26,-26,-25,-25,-24,-24,-23,-22,-21,-20,-19,-18,-18,-17,-16,-15,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,16,17,18,18,19,20,21,22,23,24,24,25,25,26,26,27,27,28,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,28,27,27,26,26,25,25,24,24,23,22,21,20,19,18,18,17,16,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-15,-16,-17,-18,-18,-19,-20,-21,-22,-23,-24,-24,-25,-25,-26,-26,-27,-27,-28,-28,-28,-29,-29,-29,-30,-30,-30,-30,-30,-30,-30,-31,-31,-31,-31,-31,-31,-31,-31,-30,-30,-30,-30,-29,-29,-29,-28,-28,-27,-27,-26,-26,-25,-24,-24,-23,-23,-22,-22,-21,-21,-20,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,11,12,13,14,15,16,17,17,18,19,20,21,21,22,22,23,23,24,24,25,26,26,27,27,28,28,29,29,29,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,29,28,28,27,27,26,26,25,24,24,23,23,22,22,21,21,20,19,18,17,17,16,15,14,13,12,11,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-20,-21,-21,-22,-22,-23,-23,-24,-24,-25,-26,-26,-27,-27,-28,-28,-29,-29,-29,-30,-30,-30,-30,-31,-31,-31,-31,-31,-31,-31,-32,-32,-32,-32,-32,-32,-32,-32,-32,-31,-31,-31,-31,-30,-30,-29,-29,-28,-28,-27,-26,-26,-25,-25,-24,-23,-22,-21,-20,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,8,9,10,11,12,13,14,15,16,17,18,19,20,20,21,22,23,24,25,25,26,26,27,28,28,29,29,30,30,31,31,31,31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,31,31,31,31,30,30,29,29,28,28,27,26,26,25,25,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-20,-21,-22,-23,-24,-25,-25,-26,-26,-27,-28,-28,-29,-29,-30,-30,-31,-31,-31,-31,-32,-32,-32,-32,-32,-32,-32,-32,-33,-33,-33,-33,-33,-33,-33,-33,-33,-32,-32,-32,-31,-31,-30,-30,-29,-29,-28,-28,-27,-27,-26,-25,-25,-24,-24,-23,-23,-22,-21,-20,-19,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,19,20,21,22,23,23,24,24,25,25,26,27,27,28,28,29,29,30,30,31,31,32,32,32,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,32,32,32,31,31,30,30,29,29,28,28,27,27,26,25,25,24,24,23,23,22,21,20,19,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-19,-20,-21,-22,-23,-23,-24,-24,-25,-25,-26,-27,-27,-28,-28,-29,-29,-30,-30,-31,-31,-32,-32,-32,-33,-33,-33,-33,-33,-33,-33,-33,-34,-34,-34,-34,-34,-34,-34,-34,-34,-33,-33,-33,-32,-32,-32,-31,-31,-31,-30,-30,-30,-29,-29,-28,-27,-27,-26,-26,-25,-24,-23,-22,-22,-21,-20,-19,-18,-18,-17,-16,-16,-15,-14,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,15,16,16,17,18,18,19,20,21,22,22,23,24,25,26,26,27,27,28,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,33,33,32,32,32,31,31,31,30,30,30,29,29,28,27,27,26,26,25,24,23,22,22,21,20,19,18,18,17,16,16,15,14,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-14,-15,-16,-16,-17,-18,-18,-19,-20,-21,-22,-22,-23,-24,-25,-26,-26,-27,-27,-28,-29,-29,-30,-30,-30,-31,-31,-31,-32,-32,-32,-33,-33,-33,-34,-34,-34,-34,-34,-34,-34,-34,-35,-35,-35,-35,-35,-35,-35,-35,-35,-34,-34,-34,-33,-33,-33,-32,-32,-31,-31,-30,-29,-29,-28,-28,-27,-26,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28,28,29,29,30,31,31,32,32,33,33,33,34,34,34,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,34,34,34,33,33,33,32,32,31,31,30,29,29,28,28,27,26,25,24,23,22,21,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-26,-27,-28,-28,-29,-29,-30,-31,-31,-32,-32,-33,-33,-33,-34,-34,-34,-35,-35,-35,-35,-35,-35,-35,-35,-36,-36,-36,-36,-36,-36,-36,-36,-36,-35,-35,-35,-34,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-28,-28,-27,-27,-26,-26,-25,-25,-24,-24,-23,-22,-21,-20,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,21,22,23,24,24,25,25,26,26,27,27,28,28,29,30,30,31,31,32,32,33,33,34,34,34,35,35,35,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,35,35,35,34,34,34,33,33,32,32,31,31,30,30,29,28,28,27,27,26,26,25,25,24,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-20,-21,-22,-23,-24,-24,-25,-25,-26,-26,-27,-27,-28,-28,-29,-30,-30,-31,-31,-32,-32,-33,-33,-34,-34,-34,-35,-35,-35,-36,-36,-36,-36,-36,-36,-36,-36,-37,-37,-37,-37,-37,-37,-37,-37,-37,-36,-36,-36,-36,-35,-35,-35,-34,-34,-33,-33,-32,-32,-31,-30,-30,-29,-29,-28,-27,-26,-25,-24,-23,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,28,29,29,30,30,31,32,32,33,33,34,34,35,35,35,36,36,36,36,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,36,36,36,36,35,35,35,34,34,33,33,32,32,31,30,30,29,29,28,27,26,25,24,23,23,22,21,20,19,18,17,16,15,14,13,12,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-23,-24,-25,-26,-27,-28,-29,-29,-30,-30,-31,-32,-32,-33,-33,-34,-34,-35,-35,-35,-36,-36,-36,-36,-37,-37,-37,-37,-37,-37,-37,-37,-38,-38,-38,-38,-38,-38,-38,-38,-38,-37,-37,-37,-37,-36,-36,-35,-35,-35,-34,-34,-34,-33,-33,-32,-32,-31,-31,-30,-29,-29,-28,-28,-27,-27,-26,-26,-25,-24,-23,-22,-22,-21,-20,-19,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,19,20,21,22,22,23,24,25,26,26,27,27,28,28,29,29,30,31,31,32,32,33,33,34,34,34,35,35,35,36,36,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,37,37,37,37,36,36,35,35,35,34,34,34,33,33,32,32,31,31,30,29,29,28,28,27,27,26,26,25,24,23,22,22,21,20,19,19,18,17,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-19,-20,-21,-22,-22,-23,-24,-25,-26,-26,-27,-27,-28,-28,-29,-29,-30,-31,-31,-32,-32,-33,-33,-34,-34,-34,-35,-35,-35,-36,-36,-37,-37,-37,-37,-38,-38,-38,-38,-38,-38,-38,-38,-39,-39,-39,-39,-39,-39,-39,-39,-39,-38,-38,-38,-38,-37,-37,-37,-36,-36,-36,-35,-35,-34,-34,-33,-33,-32,-31,-31,-30,-30,-29,-28,-27,-26,-25,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,16,17,18,19,20,21,21,22,23,24,25,25,26,27,28,29,30,30,31,31,32,33,33,34,34,35,35,36,36,36,37,37,37,38,38,38,38,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,38,38,38,38,37,37,37,36,36,36,35,35,34,34,33,33,32,31,31,30,30,29,28,27,26,25,25,24,23,22,21,21,20,19,18,17,16,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-25,-26,-27,-28,-29,-30,-30,-31,-31,-32,-33,-33,-34,-34,-35,-35,-36,-36,-36,-37,-37,-37,-38,-38,-38,-38,-39,-39,-39,-39,-39,-39,-39,-39,-40,-40,-40,-40,-40,-40,-40,-40,-40,-39,-39,-39,-39,-38,-38,-38,-37,-37,-36,-36,-35,-35,-34,-33,-33,-32,-32,-31,-30,-29,-28,-27,-26,-25,-24,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,24,25,26,27,28,29,30,31,32,32,33,33,34,35,35,36,36,37,37,38,38,38,39,39,39,39,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,39,39,39,39,38,38,38,37,37,36,36,35,35,34,33,33,32,32,31,30,29,28,27,26,25,24,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-24,-25,-26,-27,-28,-29,-30,-31,-32,-32,-33,-33,-34,-35,-35,-36,-36,-37,-37,-38,-38,-38,-39,-39,-39,-39,-40,-40,-40,-40,-40,-40,-40,-40,-41,-41,-41,-41,-41,-41,-41,-41,-41,-41,-40,-40,-40,-40,-39,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-32,-32,-31,-31,-30,-30,-29,-29,-28,-28,-27,-27,-26,-25,-24,-23,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23,24,25,26,27,27,28,28,29,29,30,30,31,31,32,32,33,34,34,35,35,36,36,37,37,38,38,39,39,39,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,40,40,40,40,39,39,39,38,38,37,37,36,36,35,35,34,34,33,32,32,31,31,30,30,29,29,28,28,27,27,26,25,24,23,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-23,-24,-25,-26,-27,-27,-28,-28,-29,-29,-30,-30,-31,-31,-32,-32,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-39,-40,-40,-40,-40,-41,-41,-41,-41,-41,-41,-41,-41,-41,-42,-42,-42,-42,-42,-42,-42,-42,-42,-42,-41,-41,-41,-40,-40,-40,-39,-39,-39,-38,-38,-38,-37,-37,-36,-36,-35,-34,-34,-33,-33,-32,-31,-30,-29,-28,-27,-26,-26,-25,-24,-23,-22,-21,-20,-20,-19,-18,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20,20,21,22,23,24,25,26,26,27,28,29,30,31,32,33,33,34,34,35,36,36,37,37,38,38,38,39,39,39,40,40,40,41,41,41,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,41,41,41,40,40,40,39,39,39,38,38,38,37,37,36,36,35,34,34,33,33,32,31,30,29,28,27,26,26,25,24,23,22,21,20,20,19,18,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-18,-19,-20,-20,-21,-22,-23,-24,-25,-26,-26,-27,-28,-29,-30,-31,-32,-33,-33,-34,-34,-35,-36,-36,-37,-37,-38,-38,-38,-39,-39,-39,-40,-40,-40,-41,-41,-41,-42,-42,-42,-42,-42,-42,-42,-42,-42,-43,-43,-43,-43,-43,-43,-43,-43,-43,-43,-42,-42,-42,-42,-41,-41,-41,-40,-40,-40,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-29,-28,-27,-26,-25,-25,-24,-23,-22,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,20,21,22,22,23,24,25,25,26,27,28,29,29,30,30,31,31,32,32,33,33,34,35,35,36,36,37,37,38,38,39,39,40,40,40,41,41,41,42,42,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42,42,41,41,41,40,40,40,39,39,38,38,37,37,36,36,35,35,34,33,33,32,32,31,31,30,30,29,29,28,27,26,25,25,24,23,22,22,21,20,19,18,17,16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-22,-23,-24,-25,-25,-26,-27,-28,-29,-29,-30,-30,-31,-31,-32,-32,-33,-33,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40,-40,-40,-41,-41,-41,-42,-42,-42,-42,-43,-43,-43,-43,-43,-43,-43,-43,-43,-44,-44,-44,-44,-44,-44,-44,-44,-44,-44,-43,-43,-43,-43,-42,-42,-42,-41,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-35,-35,-34,-34,-33,-32,-31,-30,-29,-28,-28,-27,-26,-25,-24,-24,-23,-22,-21,-20,-19,-18,-17,-16,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,18,19,20,21,22,23,24,24,25,26,27,28,28,29,30,31,32,33,34,34,35,35,36,37,37,38,38,39,39,40,40,41,41,41,42,42,42,43,43,43,43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,43,43,43,43,42,42,42,41,41,41,40,40,39,39,38,38,37,37,36,35,35,34,34,33,32,31,30,29,28,28,27,26,25,24,24,23,22,21,20,19,18,17,16,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-16,-17,-18,-19,-20,-21,-22,-23,-24,-24,-25,-26,-27,-28,-28,-29,-30,-31,-32,-33,-34,-34,-35,-35,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-41,-42,-42,-42,-43,-43,-43,-43,-44,-44,-44,-44,-44,-44,-44,-44,-44,-45,-45,-45,-45,-45,-45,-45,-45,-45,-45,-44,-44,-44,-44,-43,-43,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-37,-37,-36,-36,-35,-34,-33,-33,-32,-32,-31,-30,-29,-28,-27,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,32,33,33,34,35,36,36,37,37,38,39,39,40,40,41,41,42,42,43,43,43,44,44,44,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,44,44,44,43,43,43,42,42,41,41,40,40,39,39,38,37,37,36,36,35,34,33,33,32,32,31,30,29,28,27,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-27,-28,-29,-30,-31,-32,-32,-33,-33,-34,-35,-36,-36,-37,-37,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-43,-43,-44,-44,-44,-44,-45,-45,-45,-45,-45,-45,-45,-45,-45,-46,-46,-46,-46,-46,-46,-46,-46,-46,-46,-45,-45,-45,-45,-44,-44,-44,-43,-43,-42,-42,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-36,-36,-35,-35,-34,-34,-33,-32,-31,-31,-30,-30,-29,-28,-27,-26,-26,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,26,27,28,29,30,30,31,31,32,33,34,34,35,35,36,36,37,38,38,39,39,40,40,41,41,42,42,42,43,43,44,44,44,45,45,45,45,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,45,45,45,45,44,44,44,43,43,42,42,42,41,41,40,40,39,39,38,38,37,36,36,35,35,34,34,33,32,31,31,30,30,29,28,27,26,26,25,24,23,22,21,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-26,-26,-27,-28,-29,-30,-30,-31,-31,-32,-33,-34,-34,-35,-35,-36,-36,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-42,-42,-43,-43,-44,-44,-44,-45,-45,-45,-45,-46,-46,-46,-46,-46,-46,-46,-46,-46,-47,-47,-47,-47,-47,-47,-47,-47,-47,-47,-46,-46,-46,-46,-45,-45,-45,-44,-44,-44,-43,-43,-43,-42,-42,-41,-41,-40,-40,-39,-38,-38,-37,-37,-36,-35,-34,-33,-32,-31,-30,-29,-29,-28,-27,-26,-25,-24,-23,-23,-22,-21,-20,-19,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,19,20,21,22,23,23,24,25,26,27,28,29,29,30,31,32,33,34,35,36,37,37,38,38,39,40,40,41,41,42,42,43,43,43,44,44,44,45,45,45,46,46,46,46,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,46,46,46,46,45,45,45,44,44,44,43,43,43,42,42,41,41,40,40,39,38,38,37,37,36,35,34,33,32,31,30,29,29,28,27,26,25,24,23,23,22,21,20,19,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-19,-20,-21,-22,-23,-23,-24,-25,-26,-27,-28,-29,-29,-30,-31,-32,-33,-34,-35,-36,-37,-37,-38,-38,-39,-40,-40,-41,-41,-42,-42,-43,-43,-43,-44,-44,-44,-45,-45,-45,-46,-46,-46,-46,-47,-47,-47,-47,-47,-47,-47,-47,-47,-48,-48,-48,-48,-48,-48,-48,-48,-48,-48,-47,-47,-47,-47,-46,-46,-46,-45,-45,-45,-44,-44,-43,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-30,-29,-28,-28,-27,-26,-25,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,25,26,27,28,28,29,30,31,32,32,33,33,34,34,35,35,36,36,37,37,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,45,46,46,46,47,47,47,47,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,47,47,47,47,46,46,46,45,45,45,44,44,43,43,42,42,41,41,40,40,39,39,38,37,37,36,36,35,35,34,34,33,33,32,32,31,30,29,28,28,27,26,25,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-25,-26,-27,-28,-28,-29,-30,-31,-32,-32,-33,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-45,-46,-46,-46,-47,-47,-47,-47,-48,-48,-48,-48,-48,-48,-48,-48,-48,-49,-49,-49,-49,-49,-49,-49,-49,-49,-49,-48,-48,-48,-48,-47,-47,-47,-47,-46,-46,-46,-45,-45,-44,-44,-43,-43,-42,-42,-41,-41,-40,-39,-39,-38,-38,-37,-36,-35,-34,-33,-32,-31,-31,-30,-29,-28,-27,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,31,32,33,34,35,36,37,38,38,39,39,40,41,41,42,42,43,43,44,44,45,45,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,48,48,48,48,47,47,47,47,46,46,46,45,45,44,44,43,43,42,42,41,41,40,39,39,38,38,37,36,35,34,33,32,31,31,30,29,28,27,27,26,25,24,23,22,21,20,19,18,17,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-27,-28,-29,-30,-31,-31,-32,-33,-34,-35,-36,-37,-38,-38,-39,-39,-40,-41,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-46,-46,-47,-47,-47,-47,-48,-48,-48,-48,-49,-49,-49,-49,-49,-49,-49,-49,-49,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-49,-49,-49,-49,-49,-48,-48,-48,-48,-47,-47,-46,-46,-46,-45,-45,-44,-44,-43,-43,-42,-41,-41,-40,-40,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-34,-33,-32,-31,-30,-30,-29,-28,-27,-26,-25,-24,-23,-22,-22,-21,-20,-19,-18,-17,-16,-15,-14,-14,-13,-12,-11,-10,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,14,15,16,17,18,19,20,21,22,22,23,24,25,26,27,28,29,30,30,31,32,33,34,34,35,35,36,36,37,37,38,38,39,40,40,41,41,42,43,43,44,44,45,45,46,46,46,47,47,48,48,48,48,49,49,49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,49,49,49,49,49,48,48,48,48,47,47,46,46,46,45,45,44,44,43,43,42,41,41,40,40,39,38,38,37,37,36,36,35,35,34,34,33,32,31,30,30,29,28,27,26,25,24,23,22,22,21,20,19,18,17,16,15,14,14,13,12,11,10,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-10,-11,-12,-13,-14,-14,-15,-16,-17,-18,-19,-20,-21,-22,-22,-23,-24,-25,-26,-27,-28,-29,-30,-30,-31,-32,-33,-34,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-40,-40,-41,-41,-42,-43,-43,-44,-44,-45,-45,-46,-46,-46,-47,-47,-48,-48,-48,-48,-49,-49,-49,-49,-49,-50,-50,-50,-50,-50,-50,-50,-50,-50,-50,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-50,-50,-50,-50,-49,-49,-49,-48,-48,-47,-47,-47,-46,-46,-45,-45,-45,-44,-44,-43,-43,-42,-42,-41,-40,-40,-39,-39,-38,-37,-36,-35,-34,-33,-33,-32,-31,-30,-29,-29,-28,-27,-26,-26,-25,-24,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,24,25,26,26,27,28,29,29,30,31,32,33,33,34,35,36,37,38,39,39,40,40,41,42,42,43,43,44,44,45,45,45,46,46,47,47,47,48,48,49,49,49,50,50,50,50,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,50,50,50,50,49,49,49,48,48,47,47,47,46,46,45,45,45,44,44,43,43,42,42,41,40,40,39,39,38,37,36,35,34,33,33,32,31,30,29,29,28,27,26,26,25,24,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-24,-25,-26,-26,-27,-28,-29,-29,-30,-31,-32,-33,-33,-34,-35,-36,-37,-38,-39,-39,-40,-40,-41,-42,-42,-43,-43,-44,-44,-45,-45,-45,-46,-46,-47,-47,-47,-48,-48,-49,-49,-49,-50,-50,-50,-50,-51,-51,-51,-51,-51,-51,-51,-51,-51,-51,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-51,-51,-51,-51,-50,-50,-50,-49,-49,-49,-48,-48,-48,-47,-47,-46,-46,-45,-44,-44,-43,-42,-42,-41,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20,21,22,23,24,25,26,27,28,29,30,31,32,32,33,34,35,36,37,38,39,40,41,41,42,42,43,44,44,45,46,46,47,47,48,48,48,49,49,49,50,50,50,51,51,51,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51,51,51,51,50,50,50,49,49,49,48,48,48,47,47,46,46,45,44,44,43,42,42,41,41,40,39,38,37,36,35,34,33,32,32,31,30,29,28,27,26,25,24,23,22,21,20,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-41,-42,-42,-43,-44,-44,-45,-46,-46,-47,-47,-48,-48,-48,-49,-49,-49,-50,-50,-50,-51,-51,-51,-51,-52,-52,-52,-52,-52,-52,-52,-52,-52,-52,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-52,-52,-52,-52,-51,-51,-51,-50,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-45,-44,-44,-43,-43,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-36,-35,-35,-34,-33,-32,-31,-31,-30,-29,-28,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,28,29,30,31,31,32,33,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,43,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,50,51,51,51,52,52,52,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,52,52,52,52,51,51,51,50,50,50,49,49,48,48,47,47,46,46,45,45,44,44,43,43,42,41,41,40,40,39,39,38,38,37,37,36,36,35,35,34,33,32,31,31,30,29,28,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-28,-29,-30,-31,-31,-32,-33,-34,-35,-35,-36,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-43,-43,-44,-44,-45,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-50,-51,-51,-51,-52,-52,-52,-52,-53,-53,-53,-53,-53,-53,-53,-53,-53,-53,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-53,-53,-53,-53,-52,-52,-52,-51,-51,-51,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-45,-44,-43,-43,-42,-42,-41,-40,-39,-38,-37,-36,-35,-34,-34,-33,-32,-31,-30,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,30,31,32,33,34,34,35,36,37,38,39,40,41,42,42,43,43,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,51,52,52,52,53,53,53,53,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,53,53,53,53,52,52,52,51,51,51,50,50,49,49,48,48,47,47,46,46,45,45,44,43,43,42,42,41,40,39,38,37,36,35,34,34,33,32,31,30,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-30,-31,-32,-33,-34,-34,-35,-36,-37,-38,-39,-40,-41,-42,-42,-43,-43,-44,-45,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-51,-51,-51,-52,-52,-52,-53,-53,-53,-53,-54,-54,-54,-54,-54,-54,-54,-54,-54,-54,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-54,-54,-54,-54,-53,-53,-53,-53,-52,-52,-52,-51,-51,-51,-50,-50,-50,-49,-49,-49,-48,-48,-47,-47,-46,-45,-45,-44,-44,-43,-42,-42,-41,-41,-40,-40,-39,-39,-38,-38,-37,-37,-36,-35,-34,-33,-33,-32,-31,-30,-29,-28,-27,-27,-26,-25,-25,-24,-23,-23,-22,-21,-20,-19,-18,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,23,24,25,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,37,38,38,39,39,40,40,41,41,42,42,43,44,44,45,45,46,47,47,48,48,49,49,49,50,50,50,51,51,51,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,54,54,54,54,53,53,53,53,52,52,52,51,51,51,50,50,50,49,49,49,48,48,47,47,46,45,45,44,44,43,42,42,41,41,40,40,39,39,38,38,37,37,36,35,34,33,33,32,31,30,29,28,27,27,26,25,25,24,23,23,22,21,20,19,18,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-18,-19,-20,-21,-22,-23,-23,-24,-25,-25,-26,-27,-27,-28,-29,-30,-31,-32,-33,-33,-34,-35,-36,-37,-37,-38,-38,-39,-39,-40,-40,-41,-41,-42,-42,-43,-44,-44,-45,-45,-46,-47,-47,-48,-48,-49,-49,-49,-50,-50,-50,-51,-51,-51,-52,-52,-52,-53,-53,-53,-53,-54,-54,-54,-54,-55,-55,-55,-55,-55,-55,-55,-55,-55,-55,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-55,-55,-55,-55,-54,-54,-54,-54,-53,-53,-52,-52,-52,-51,-51,-50,-50,-49,-49,-48,-48,-47,-47,-46,-46,-45,-44,-44,-43,-43,-42,-41,-40,-39,-38,-37,-36,-36,-35,-34,-33,-32,-32,-31,-30,-29,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,29,30,31,32,32,33,34,35,36,36,37,38,39,40,41,42,43,43,44,44,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,52,53,53,54,54,54,54,55,55,55,55,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,55,55,55,55,54,54,54,54,53,53,52,52,52,51,51,50,50,49,49,48,48,47,47,46,46,45,44,44,43,43,42,41,40,39,38,37,36,36,35,34,33,32,32,31,30,29,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-29,-30,-31,-32,-32,-33,-34,-35,-36,-36,-37,-38,-39,-40,-41,-42,-43,-43,-44,-44,-45,-46,-46,-47,-47,-48,-48,-49,-49,-50,-50,-51,-51,-52,-52,-52,-53,-53,-54,-54,-54,-54,-55,-55,-55,-55,-56,-56,-56,-56,-56,-56,-56,-56,-56,-56,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-56,-56,-56,-56,-56,-55,-55,-55,-55,-54,-54,-54,-53,-53,-53,-52,-52,-51,-51,-50,-50,-49,-49,-48,-48,-47,-46,-46,-45,-45,-44,-43,-42,-41,-41,-40,-39,-38,-37,-36,-35,-35,-34,-33,-32,-31,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-21,-20,-19,-18,-17,-16,-15,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28,29,30,31,31,32,33,34,35,35,36,37,38,39,40,41,41,42,43,44,45,45,46,46,47,48,48,49,49,50,50,51,51,52,52,53,53,53,54,54,54,55,55,55,55,56,56,56,56,56,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,56,56,56,56,56,55,55,55,55,54,54,54,53,53,53,52,52,51,51,50,50,49,49,48,48,47,46,46,45,45,44,43,42,41,41,40,39,38,37,36,35,35,34,33,32,31,31,30,29,28,27,26,25,24,23,22,21,21,20,19,18,17,16,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-15,-16,-17,-18,-19,-20,-21,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-31,-32,-33,-34,-35,-35,-36,-37,-38,-39,-40,-41,-41,-42,-43,-44,-45,-45,-46,-46,-47,-48,-48,-49,-49,-50,-50,-51,-51,-52,-52,-53,-53,-53,-54,-54,-54,-55,-55,-55,-55,-56,-56,-56,-56,-56,-57,-57,-57,-57,-57,-57,-57,-57,-57,-57,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-57,-57,-57,-57,-57,-56,-56,-56,-55,-55,-55,-54,-54,-53,-53,-52,-52,-51,-51,-50,-50,-49,-48,-48,-47,-47,-46,-45,-45,-44,-44,-43,-43,-42,-42,-41,-40,-40,-39,-39,-38,-38,-37,-36,-35,-34,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,34,35,36,37,38,38,39,39,40,40,41,42,42,43,43,44,44,45,45,46,47,47,48,48,49,50,50,51,51,52,52,53,53,54,54,55,55,55,56,56,56,57,57,57,57,57,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,57,57,57,57,57,56,56,56,55,55,55,54,54,53,53,52,52,51,51,50,50,49,48,48,47,47,46,45,45,44,44,43,43,42,42,41,40,40,39,39,38,38,37,36,35,34,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-34,-35,-36,-37,-38,-38,-39,-39,-40,-40,-41,-42,-42,-43,-43,-44,-44,-45,-45,-46,-47,-47,-48,-48,-49,-50,-50,-51,-51,-52,-52,-53,-53,-54,-54,-55,-55,-55,-56,-56,-56,-57,-57,-57,-57,-57,-58,-58,-58,-58,-58,-58,-58,-58,-58,-58,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59,-58,-58,-58,-58,-58,-57,-57,-57,-56,-56,-56,-55,-55,-54,-54,-54,-53,-53,-53,-52,-52,-51,-51,-50,-50,-49,-49,-48,-47,-47,-46,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-37,-36,-35,-34,-33,-33,-32,-31,-30,-29,-28,-28,-27,-26,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,26,27,28,28,29,30,31,32,33,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,47,48,49,49,50,50,51,51,52,52,53,53,53,54,54,54,55,55,56,56,56,57,57,57,58,58,58,58,58,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,58,58,58,58,58,57,57,57,56,56,56,55,55,54,54,54,53,53,53,52,52,51,51,50,50,49,49,48,47,47,46,46,45,44,43,42,41,40,39,38,37,37,36,35,34,33,33,32,31,30,29,28,28,27,26,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-26,-27,-28,-28,-29,-30,-31,-32,-33,-33,-34,-35,-36,-37,-37,-38,-39,-40,-41,-42,-43,-44,-45,-46,-46,-47,-47,-48,-49,-49,-50,-50,-51,-51,-52,-52,-53,-53,-53,-54,-54,-54,-55,-55,-56,-56,-56,-57,-57,-57,-58,-58,-58,-58,-58,-59,-59,-59,-59,-59,-59,-59,-59,-59,-59];
var towards_center = [0,0,0,0,0,0,0,0,0,1,1,2,3,3,3,4,5,5,5,6
gitextract_lz9578_u/
├── DEVELOPMENT.md
├── LICENSE.md
├── README.md
├── depth-camera.js
├── depth-to-color-sync-render.js
├── depthdemo.html
├── gesture/
│ ├── depth_and_segments.js
│ ├── index.html
│ └── indexaframe.html
├── index.html
├── libs/
│ ├── aframe/
│ │ ├── LICENSE.txt
│ │ └── aframe-v0.7.1.js
│ ├── ammo.js/
│ │ ├── LICENSE
│ │ └── ammo.js
│ ├── gl-matrix.js
│ └── picogl.js/
│ ├── picogl.js
│ └── utils.js
├── nn/
│ └── using-deeplab/
│ ├── README.md
│ ├── argmax257_2/
│ │ ├── LICENSE
│ │ ├── group1-shard1of2
│ │ ├── group1-shard2of2
│ │ ├── tensorflowjs_model.pb
│ │ └── weights_manifest.json
│ ├── index.html
│ └── tfjs/
│ ├── LICENSE
│ └── tf-core.js
├── tools/
│ └── generate_concentric_circles_indices.js
└── typing_in_the_air/
├── doc/
│ └── tutorial.html
├── front_capture_typing.html
└── front_capture_typing.js
Showing preview only (304K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3475 symbols across 11 files)
FILE: depth-camera.js
class DepthCamera (line 17) | class DepthCamera {
method constructor (line 19) | constructor() {
method getDepthStream (line 22) | static async getDepthStream() {
method getColorStreamForDepthStream (line 89) | static async getColorStreamForDepthStream(depthStream, w = 640, h = 48...
method getCameraCalibration (line 149) | static getCameraCalibration(depth_stream) {
function chromeVersion (line 599) | function chromeVersion() {
FILE: depth-to-color-sync-render.js
constant REDUCE_BLACK_PASSES (line 30) | const REDUCE_BLACK_PASSES = 7;
class DepthToColorSyncRender (line 32) | class DepthToColorSyncRender {
method constructor (line 33) | constructor(canvas) {
method createVideo (line 49) | createVideo(w = 640, h = 480) {
method setupCamera (line 62) | async setupCamera(depth_video = null) {
method showBackgroundColor (line 87) | showBackgroundColor(on) {
method showBackgroundVideo (line 91) | showBackgroundVideo(on) {
method setupTextures (line 105) | setupTextures(gl, programs, width, height, colorwidth, colorheight) {
method setupPrograms (line 159) | setupPrograms(gl) {
method setup (line 553) | setup(gl, cameraParams, depthW, depthH, colorW, colorH) {
method initAttributes (line 632) | initAttributes(gl) {
method initUniforms (line 641) | initUniforms(gl, cameraParams, width, height) {
method setDepthVideo (line 704) | setDepthVideo(video) {
method play (line 715) | async play() {
method pause (line 865) | pause() {
FILE: gesture/depth_and_segments.js
constant INTERPOLATE_INV (line 17) | const INTERPOLATE_INV = 1 / 20.0;
class DepthAndSegments (line 19) | class DepthAndSegments {
method constructor (line 20) | constructor(gl, drawGL = null) {
method process (line 39) | process(drawGL) {
method getMVPMatrix (line 127) | getMVPMatrix() {
method draw (line 131) | draw(mvp = null, lightmvp, light_position, shadow_map_unit) {
method createDepthInfoCanvas (line 163) | createDepthInfoCanvas() {
method videoLoaded (line 176) | videoLoaded(video, stream) {
method setCameraParameters (line 197) | setCameraParameters(parameters) {
method setXZFlip (line 234) | setXZFlip(value) {
method identifyJointsAndFixNoise (line 242) | identifyJointsAndFixNoise(segment_data) {
method getDepthNonSkeleton (line 354) | getDepthNonSkeleton(x, y) {
method getSegmentInterpolatedCount (line 358) | getSegmentInterpolatedCount(segment) {
method getInterpolatedPoint (line 365) | getInterpolatedPoint(vec, segment, i) {
method getSegmentEnd (line 373) | getSegmentEnd(seg) {
function handleError (line 393) | function handleError(error) {
function createDepthVideo (line 407) | function createDepthVideo() {
function reload (line 421) | function reload() {
function putReadPixelsToTestCanvas (line 439) | function putReadPixelsToTestCanvas(testContext) {
function initGL (line 535) | function initGL(gl, drawGL) {
function getMvpMatrix (line 837) | function getMvpMatrix(screenwidth, screenheight) {
function processOnCPU (line 878) | function processOnCPU() {
function markConnectedPoints (line 927) | function markConnectedPoints(index, column, row, radius, segment_data) {
function modf (line 1002) | function modf(v) {
FILE: libs/aframe/aframe-v0.7.1.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function anArray (line 921) | function anArray(arr) {
function placeHoldersCount (line 955) | function placeHoldersCount (b64) {
function byteLength (line 969) | function byteLength (b64) {
function toByteArray (line 974) | function toByteArray (b64) {
function tripletToBase64 (line 1005) | function tripletToBase64 (num) {
function encodeChunk (line 1009) | function encodeChunk (uint8, start, end) {
function fromByteArray (line 1019) | function fromByteArray (uint8) {
function defaultSetTimout (line 1115) | function defaultSetTimout() {
function defaultClearTimeout (line 1118) | function defaultClearTimeout () {
function runTimeout (line 1141) | function runTimeout(fun) {
function runClearTimeout (line 1166) | function runClearTimeout(marker) {
function cleanUpNextTick (line 1198) | function cleanUpNextTick() {
function drainQueue (line 1213) | function drainQueue() {
function Item (line 1251) | function Item(fun, array) {
function noop (line 1265) | function noop() {}
function typedArraySupport (line 1358) | function typedArraySupport () {
function kMaxLength (line 1370) | function kMaxLength () {
function createBuffer (line 1376) | function createBuffer (that, length) {
function Buffer (line 1405) | function Buffer (arg, encodingOrOffset, length) {
function from (line 1430) | function from (that, value, encodingOrOffset, length) {
function assertSize (line 1471) | function assertSize (size) {
function alloc (line 1479) | function alloc (that, size, fill, encoding) {
function allocUnsafe (line 1503) | function allocUnsafe (that, size) {
function fromString (line 1527) | function fromString (that, string, encoding) {
function fromArrayLike (line 1551) | function fromArrayLike (that, array) {
function fromArrayBuffer (line 1560) | function fromArrayBuffer (that, array, byteOffset, length) {
function fromObject (line 1590) | function fromObject (that, obj) {
function checked (line 1620) | function checked (length) {
function SlowBuffer (line 1630) | function SlowBuffer (length) {
function byteLength (line 1713) | function byteLength (string, encoding) {
function slowToString (line 1758) | function slowToString (encoding, start, end) {
function swap (line 1832) | function swap (b, n, m) {
function bidirectionalIndexOf (line 1966) | function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
function arrayIndexOf (line 2023) | function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
function hexWrite (line 2091) | function hexWrite (buf, string, offset, length) {
function utf8Write (line 2118) | function utf8Write (buf, string, offset, length) {
function asciiWrite (line 2122) | function asciiWrite (buf, string, offset, length) {
function latin1Write (line 2126) | function latin1Write (buf, string, offset, length) {
function base64Write (line 2130) | function base64Write (buf, string, offset, length) {
function ucs2Write (line 2134) | function ucs2Write (buf, string, offset, length) {
function base64Slice (line 2217) | function base64Slice (buf, start, end) {
function utf8Slice (line 2225) | function utf8Slice (buf, start, end) {
function decodeCodePointsArray (line 2303) | function decodeCodePointsArray (codePoints) {
function asciiSlice (line 2321) | function asciiSlice (buf, start, end) {
function latin1Slice (line 2331) | function latin1Slice (buf, start, end) {
function hexSlice (line 2341) | function hexSlice (buf, start, end) {
function utf16leSlice (line 2354) | function utf16leSlice (buf, start, end) {
function checkOffset (line 2402) | function checkOffset (offset, ext, length) {
function checkInt (line 2563) | function checkInt (buf, value, offset, ext, max, min) {
function objectWriteUInt16 (line 2616) | function objectWriteUInt16 (buf, value, offset, littleEndian) {
function objectWriteUInt32 (line 2650) | function objectWriteUInt32 (buf, value, offset, littleEndian) {
function checkIEEE754 (line 2800) | function checkIEEE754 (buf, value, offset, ext, max, min) {
function writeFloat (line 2805) | function writeFloat (buf, value, offset, littleEndian, noAssert) {
function writeDouble (line 2821) | function writeDouble (buf, value, offset, littleEndian, noAssert) {
function base64clean (line 2954) | function base64clean (str) {
function stringtrim (line 2966) | function stringtrim (str) {
function toHex (line 2971) | function toHex (n) {
function utf8ToBytes (line 2976) | function utf8ToBytes (string, units) {
function asciiToBytes (line 3056) | function asciiToBytes (str) {
function utf16leToBytes (line 3065) | function utf16leToBytes (str, units) {
function base64ToBytes (line 3081) | function base64ToBytes (str) {
function blitBuffer (line 3085) | function blitBuffer (src, dst, offset, length) {
function isnan (line 3093) | function isnan (val) {
function useColors (line 3146) | function useColors() {
function formatArgs (line 3171) | function formatArgs() {
function log (line 3212) | function log() {
function save (line 3227) | function save(namespaces) {
function load (line 3244) | function load() {
function localstorage (line 3269) | function localstorage(){
function selectColor (line 3318) | function selectColor() {
function debug (line 3330) | function debug(namespace) {
function enable (line 3396) | function enable(namespaces) {
function disable (line 3419) | function disable() {
function enabled (line 3431) | function enabled(name) {
function coerce (line 3454) | function coerce(val) {
function toObject (line 3465) | function toObject(val) {
function assignKey (line 3473) | function assignKey(to, from, key) {
function assign (line 3493) | function assign(to, from) {
function st (line 3531) | function st(e,t){for(var n=0,r=e.length;n<r;n++)gt(e[n],t)}
function ot (line 3531) | function ot(e){for(var t=0,n=e.length,r;t<n;t++)r=e[t],it(r,w[at(r)])}
function ut (line 3531) | function ut(e){return function(t){F(t)&&(gt(t,e),st(t.querySelectorAll(E...
function at (line 3531) | function at(e){var t=R.call(e,"is"),n=e.nodeName.toUpperCase(),r=x.call(...
function ft (line 3531) | function ft(e,t){return-1<E.indexOf(e+'[is="'+t+'"]')}
function lt (line 3531) | function lt(e){var t=e.currentTarget,n=e.attrChange,r=e.attrName,i=e.tar...
function ct (line 3531) | function ct(e){var t=ut(e);return function(e){$.push(t,e.target)}}
function ht (line 3531) | function ht(e){G&&(G=!1,e.currentTarget.removeEventListener(p,ht)),st((e...
function pt (line 3531) | function pt(e,t){var n=this;U.call(n,e,t),Z.call(n,{target:n})}
function dt (line 3531) | function dt(e,t){P(e,t),nt?nt.observe(e,X):(Q&&(e.setAttribute=pt,e[s]=t...
function vt (line 3531) | function vt(){for(var e,t=0,n=I.length;t<n;t++)e=I[t],S.contains(e)||(n-...
function mt (line 3531) | function mt(e){throw new Error("A "+e+" type is already registered")}
function gt (line 3531) | function gt(e,t){var n,r=at(e);-1<r&&(rt(e,w[r]),r=0,t===o&&!e[o]?(e[u]=...
function e (line 3531) | function e(e,t){for(var n,r=A(t),i=0,s=r.length;i<s;i++)n=r[i],N.call(e,...
function n (line 3531) | function n(e,t){for(var n=0,r=e.length;n<r;t(e[n++]));}
function flattenVertexData (line 3562) | function flattenVertexData (data, output, offset) {
function forEach (line 3613) | function forEach(list, iterator, context) {
function forEachArray (line 3630) | function forEachArray(array, iterator, context) {
function forEachString (line 3638) | function forEachString(string, iterator, context) {
function forEachObject (line 3645) | function forEachObject(object, iterator, context) {
function isBuffer (line 3796) | function isBuffer (obj) {
function isSlowBuffer (line 3801) | function isSlowBuffer (obj) {
function isFunction (line 3810) | function isFunction (fn) {
function TextLayout (line 3849) | function TextLayout(opt) {
function addGetter (line 4043) | function addGetter(name) {
function wrapper (line 4051) | function wrapper(name) {
function getGlyphById (line 4059) | function getGlyphById(font, id) {
function getXHeight (line 4069) | function getXHeight(font) {
function getMGlyph (line 4079) | function getMGlyph(font) {
function getCapHeight (line 4089) | function getCapHeight(font) {
function getKerning (line 4099) | function getKerning(font, left, right) {
function getAlignType (line 4112) | function getAlignType(align) {
function findChar (line 4120) | function findChar (array, value, start) {
function isArrayBuffer (line 4208) | function isArrayBuffer(arr) {
function getBinaryOpts (line 4213) | function getBinaryOpts(opt) {
function toObject (line 4256) | function toObject(val) {
function shouldUseNative (line 4264) | function shouldUseNative() {
function splitLine (line 4377) | function splitLine(line, idx) {
function parseData (line 4428) | function parseData(data) {
function parseIntList (line 4439) | function parseIntList(data) {
function readBlock (line 4469) | function readBlock(target, buf, i) {
function readInfo (line 4497) | function readInfo(buf, i) {
function readCommon (line 4529) | function readCommon(buf, i) {
function readPages (line 4545) | function readPages(buf, i, size) {
function readChars (line 4557) | function readChars(buf, i, blockSize) {
function readKernings (line 4579) | function readKernings(buf, i, blockSize) {
function readNameNT (line 4593) | function readNameNT(buf, offset) {
function readStringNT (line 4602) | function readStringNT(buf, offset) {
function getAttribs (line 4671) | function getAttribs(element) {
function getAttribList (line 4680) | function getAttribList(element) {
function mapName (line 4688) | function mapName(nodeName) {
function parseIntList (line 4715) | function parseIntList(data) {
function normalizeArray (line 4779) | function normalizeArray(parts, allowAboveRoot) {
function trim (line 4888) | function trim(arr) {
function filter (line 4961) | function filter (xs, f) {
function bind (line 5026) | function bind(fn, thisArg) {
function Promise (line 5034) | function Promise(fn) {
function handle (line 5044) | function handle(deferred) {
function resolve (line 5068) | function resolve(newValue) {
function reject (line 5084) | function reject(newValue) {
function finale (line 5090) | function finale() {
function Handler (line 5097) | function Handler(onFulfilled, onRejected, resolve, reject){
function doResolve (line 5110) | function doResolve(fn, onFulfilled, onRejected) {
function res (line 5146) | function res(i, val) {
function parse (line 5274) | function parse(raw, opts) {
function isNumeric (line 5310) | function isNumeric(n) {
function getKeyValueChunks (line 5323) | function getKeyValueChunks(raw) {
function stringify (line 5362) | function stringify(obj) {
function normalize (line 5377) | function normalize(str, opts) {
function TextGeometry (line 5400) | function TextGeometry (opt) {
function bounds (line 5514) | function bounds (positions) {
function setIndex (line 5636) | function setIndex (geometry, data, itemSize, dtype) {
function setAttribute (line 5649) | function setAttribute (geometry, key, data, itemSize, dtype) {
function updateAttribute (line 5666) | function updateAttribute (attrib, data, itemSize, dtype) {
function rebuildAttribute (line 5715) | function rebuildAttribute (attrib, data, itemSize) {
function EventDispatcher (line 5839) | function EventDispatcher() {}
function Vector2 (line 6218) | function Vector2( x, y ) {
function Texture (line 6698) | function Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, fo...
function getDataURL (line 6807) | function getDataURL( image ) {
function Vector4 (line 6994) | function Vector4( x, y, z, w ) {
function WebGLRenderTarget (line 7624) | function WebGLRenderTarget( width, height, options ) {
function WebGLRenderTargetCube (line 7703) | function WebGLRenderTargetCube( width, height, options ) {
function Quaternion (line 7724) | function Quaternion( x, y, z, w ) {
function Vector3 (line 8332) | function Vector3( x, y, z ) {
function Matrix4 (line 9066) | function Matrix4() {
function DataTexture (line 9979) | function DataTexture( data, width, height, format, type, mapping, wrapS,...
function CubeTexture (line 10003) | function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilte...
function UniformContainer (line 10089) | function UniformContainer() {
function flatten (line 10110) | function flatten( array, nBlocks, blockSize ) {
function allocTexUnits (line 10147) | function allocTexUnits( renderer, n ) {
function setValue1f (line 10172) | function setValue1f( gl, v ) { gl.uniform1f( this.addr, v ); }
function setValue1i (line 10173) | function setValue1i( gl, v ) { gl.uniform1i( this.addr, v ); }
function setValue2fv (line 10177) | function setValue2fv( gl, v ) {
function setValue3fv (line 10184) | function setValue3fv( gl, v ) {
function setValue4fv (line 10195) | function setValue4fv( gl, v ) {
function setValue2fm (line 10204) | function setValue2fm( gl, v ) {
function setValue3fm (line 10210) | function setValue3fm( gl, v ) {
function setValue4fm (line 10225) | function setValue4fm( gl, v ) {
function setValueT1 (line 10242) | function setValueT1( gl, v, renderer ) {
function setValueT6 (line 10250) | function setValueT6( gl, v, renderer ) {
function setValue2iv (line 10260) | function setValue2iv( gl, v ) { gl.uniform2iv( this.addr, v ); }
function setValue3iv (line 10261) | function setValue3iv( gl, v ) { gl.uniform3iv( this.addr, v ); }
function setValue4iv (line 10262) | function setValue4iv( gl, v ) { gl.uniform4iv( this.addr, v ); }
function getSingularSetter (line 10266) | function getSingularSetter( type ) {
function setValue1fv (line 10293) | function setValue1fv( gl, v ) { gl.uniform1fv( this.addr, v ); }
function setValue1iv (line 10294) | function setValue1iv( gl, v ) { gl.uniform1iv( this.addr, v ); }
function setValueV2a (line 10298) | function setValueV2a( gl, v ) {
function setValueV3a (line 10304) | function setValueV3a( gl, v ) {
function setValueV4a (line 10310) | function setValueV4a( gl, v ) {
function setValueM2a (line 10318) | function setValueM2a( gl, v ) {
function setValueM3a (line 10324) | function setValueM3a( gl, v ) {
function setValueM4a (line 10330) | function setValueM4a( gl, v ) {
function setValueT1a (line 10338) | function setValueT1a( gl, v, renderer ) {
function setValueT6a (line 10353) | function setValueT6a( gl, v, renderer ) {
function getPureArraySetter (line 10370) | function getPureArraySetter( type ) {
function SingleUniform (line 10397) | function SingleUniform( id, activeInfo, addr ) {
function PureArrayUniform (line 10407) | function PureArrayUniform( id, activeInfo, addr ) {
function StructuredUniform (line 10418) | function StructuredUniform( id ) {
function addUniform (line 10457) | function addUniform( container, uniformObject ) {
function parseUniform (line 10464) | function parseUniform( activeInfo, addr, container ) {
function WebGLUniforms (line 10516) | function WebGLUniforms( gl, program, renderer ) {
function Color (line 10617) | function Color( r, g, b ) {
function hue2rgb (line 10690) | function hue2rgb( p, q, t ) {
function handleAlpha (line 10731) | function handleAlpha( string ) {
function Box2 (line 11925) | function Box2( min, max ) {
function WebGLFlareRenderer (line 12143) | function WebGLFlareRenderer( renderer, gl, state, textures, capabilities...
function CanvasTexture (line 12523) | function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFil...
function WebGLSpriteRenderer (line 12539) | function WebGLSpriteRenderer( renderer, gl, state, textures, capabilitie...
function Material (line 12911) | function Material() {
function extractFromCache (line 13143) | function extractFromCache( cache ) {
function ShaderMaterial (line 13274) | function ShaderMaterial( parameters ) {
function MeshDepthMaterial (line 13398) | function MeshDepthMaterial( parameters ) {
function MeshDistanceMaterial (line 13479) | function MeshDistanceMaterial( parameters ) {
function Box3 (line 13540) | function Box3( min, max ) {
function Sphere (line 14020) | function Sphere( center, radius ) {
function Matrix3 (line 14187) | function Matrix3() {
function Plane (line 14511) | function Plane( normal, constant ) {
function Frustum (line 14738) | function Frustum( p0, p1, p2, p3, p4, p5 ) {
function WebGLShadowMap (line 14932) | function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
function WebGLAttributes (line 15365) | function WebGLAttributes( gl ) {
function Euler (line 15520) | function Euler( x, y, z, order ) {
function Layers (line 15863) | function Layers() {
function Object3D (line 15913) | function Object3D() {
function serialize (line 16518) | function serialize( library, element ) {
function extractFromCache (line 16593) | function extractFromCache( cache ) {
function Camera (line 16667) | function Camera() {
function OrthographicCamera (line 16732) | function OrthographicCamera( left, right, top, bottom, near, far ) {
function PerspectiveCamera (line 16856) | function PerspectiveCamera( fov, aspect, near, far ) {
function Face3 (line 17073) | function Face3( a, b, c, normal, color, materialIndex ) {
function GeometryIdCount (line 17136) | function GeometryIdCount() { return count++; }
function Geometry (line 17138) | function Geometry() {
function addFace (line 17377) | function addFace( a, b, c, materialIndex ) {
function materialIndexSort (line 18053) | function materialIndexSort( a, b ) {
function setBit (line 18209) | function setBit( value, position, enabled ) {
function getNormalIndex (line 18215) | function getNormalIndex( normal ) {
function getColorIndex (line 18232) | function getColorIndex( color ) {
function getUvIndex (line 18249) | function getUvIndex( uv ) {
function BufferAttribute (line 18554) | function BufferAttribute( array, itemSize, normalized ) {
function Int8BufferAttribute (line 18888) | function Int8BufferAttribute( array, itemSize ) {
function Uint8BufferAttribute (line 18898) | function Uint8BufferAttribute( array, itemSize ) {
function Uint8ClampedBufferAttribute (line 18908) | function Uint8ClampedBufferAttribute( array, itemSize ) {
function Int16BufferAttribute (line 18918) | function Int16BufferAttribute( array, itemSize ) {
function Uint16BufferAttribute (line 18928) | function Uint16BufferAttribute( array, itemSize ) {
function Int32BufferAttribute (line 18938) | function Int32BufferAttribute( array, itemSize ) {
function Uint32BufferAttribute (line 18948) | function Uint32BufferAttribute( array, itemSize ) {
function Float32BufferAttribute (line 18958) | function Float32BufferAttribute( array, itemSize ) {
function Float64BufferAttribute (line 18968) | function Float64BufferAttribute( array, itemSize ) {
function DirectGeometry (line 18981) | function DirectGeometry() {
function arrayMax (line 19240) | function arrayMax( array ) {
function BufferGeometry (line 19261) | function BufferGeometry() {
function BoxGeometry (line 20353) | function BoxGeometry( width, height, depth, widthSegments, heightSegment...
function BoxBufferGeometry (line 20378) | function BoxBufferGeometry( width, height, depth, widthSegments, heightS...
function PlaneGeometry (line 20545) | function PlaneGeometry( width, height, widthSegments, heightSegments ) {
function PlaneBufferGeometry (line 20568) | function PlaneBufferGeometry( width, height, widthSegments, heightSegmen...
function MeshBasicMaterial (line 20690) | function MeshBasicMaterial( parameters ) {
function Ray (line 20773) | function Ray( origin, direction ) {
function Line3 (line 21303) | function Line3( start, end ) {
function Triangle (line 21429) | function Triangle( a, b, c ) {
function Mesh (line 21683) | function Mesh( geometry, material ) {
function uvIntersection (line 21799) | function uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {
function checkIntersection (line 21813) | function checkIntersection( object, material, raycaster, ray, pA, pB, pC...
function checkBufferGeometryIntersection (line 21844) | function checkBufferGeometryIntersection( object, raycaster, ray, positi...
function WebGLBackground (line 22054) | function WebGLBackground( renderer, state, geometries, premultipliedAlph...
function painterSortStable (line 22189) | function painterSortStable( a, b ) {
function reversePainterSortStable (line 22215) | function reversePainterSortStable( a, b ) {
function WebGLRenderList (line 22233) | function WebGLRenderList() {
function WebGLRenderLists (line 22307) | function WebGLRenderLists() {
function absNumericalSort (line 22346) | function absNumericalSort( a, b ) {
function WebGLMorphtargets (line 22352) | function WebGLMorphtargets( gl ) {
function WebGLIndexedBufferRenderer (line 22455) | function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) {
function WebGLBufferRenderer (line 22520) | function WebGLBufferRenderer( gl, extensions, infoRender ) {
function WebGLGeometries (line 22587) | function WebGLGeometries( gl, attributes, infoMemory ) {
function UniformsCache (line 22776) | function UniformsCache() {
function WebGLLights (line 22869) | function WebGLLights() {
function WebGLObjects (line 23099) | function WebGLObjects( geometries, infoRender ) {
function addLineNumbers (line 23149) | function addLineNumbers( string ) {
function WebGLShader (line 23163) | function WebGLShader( gl, type, string ) {
function getEncodingComponents (line 23195) | function getEncodingComponents( encoding ) {
function getTexelDecodingFunction (line 23220) | function getTexelDecodingFunction( functionName, encoding ) {
function getTexelEncodingFunction (line 23227) | function getTexelEncodingFunction( functionName, encoding ) {
function getToneMappingFunction (line 23234) | function getToneMappingFunction( functionName, toneMapping ) {
function generateExtensions (line 23265) | function generateExtensions( extensions, parameters, rendererExtensions ) {
function generateDefines (line 23280) | function generateDefines( defines ) {
function fetchAttributeLocations (line 23298) | function fetchAttributeLocations( gl, program, identifiers ) {
function filterEmptyLine (line 23319) | function filterEmptyLine( string ) {
function replaceLightNums (line 23325) | function replaceLightNums( string, parameters ) {
function parseIncludes (line 23336) | function parseIncludes( string ) {
function unrollLoops (line 23358) | function unrollLoops( string ) {
function WebGLProgram (line 23380) | function WebGLProgram( renderer, extensions, code, material, shader, par...
function WebGLPrograms (line 23859) | function WebGLPrograms( renderer, extensions, capabilities ) {
function WebGLTextures (line 24159) | function WebGLTextures( _gl, extensions, state, properties, capabilities...
function WebGLProperties (line 24950) | function WebGLProperties() {
function WebGLState (line 24994) | function WebGLState( gl, extensions, utils ) {
function WebGLCapabilities (line 25938) | function WebGLCapabilities( gl, extensions, parameters ) {
function ArrayCamera (line 26048) | function ArrayCamera( array ) {
function WebVRManager (line 26068) | function WebVRManager( renderer ) {
function WebGLExtensions (line 26281) | function WebGLExtensions( gl ) {
function WebGLClipping (line 26344) | function WebGLClipping() {
function WebGLUtils (line 26504) | function WebGLUtils ( gl, extensions ) {
function WebGLRenderer (line 26645) | function WebGLRenderer( parameters ) {
function FogExp2 (line 29103) | function FogExp2 ( color, density ) {
function Fog (line 29135) | function Fog ( color, near, far ) {
function Scene (line 29169) | function Scene () {
function LensFlare (line 29220) | function LensFlare( texture, size, distance, blending, color ) {
function SpriteMaterial (line 29325) | function SpriteMaterial( parameters ) {
function Sprite (line 29365) | function Sprite( material ) {
function LOD (line 29428) | function LOD() {
function Skeleton (line 29600) | function Skeleton( bones, boneInverses ) {
function Bone (line 29755) | function Bone() {
function SkinnedMesh (line 29777) | function SkinnedMesh( geometry, material ) {
function LineBasicMaterial (line 29986) | function LineBasicMaterial( parameters ) {
function Line (line 30027) | function Line( geometry, material, mode ) {
function LineSegments (line 30212) | function LineSegments( geometry, material ) {
function LineLoop (line 30232) | function LineLoop( geometry, material ) {
function PointsMaterial (line 30262) | function PointsMaterial( parameters ) {
function Points (line 30305) | function Points( geometry, material ) {
function testPoint (line 30354) | function testPoint( point, index ) {
function Group (line 30442) | function Group() {
function VideoTexture (line 30460) | function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilte...
function CompressedTexture (line 30491) | function CompressedTexture( mipmaps, width, height, format, type, mappin...
function DepthTexture (line 30520) | function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFi...
function WireframeGeometry (line 30554) | function WireframeGeometry( geometry ) {
function ParametricGeometry (line 30732) | function ParametricGeometry( func, slices, stacks ) {
function ParametricBufferGeometry (line 30754) | function ParametricBufferGeometry( func, slices, stacks ) {
function PolyhedronGeometry (line 30881) | function PolyhedronGeometry( vertices, indices, radius, detail ) {
function PolyhedronBufferGeometry (line 30904) | function PolyhedronBufferGeometry( vertices, indices, radius, detail ) {
function TetrahedronGeometry (line 31212) | function TetrahedronGeometry( radius, detail ) {
function TetrahedronBufferGeometry (line 31233) | function TetrahedronBufferGeometry( radius, detail ) {
function OctahedronGeometry (line 31264) | function OctahedronGeometry( radius, detail ) {
function OctahedronBufferGeometry (line 31285) | function OctahedronBufferGeometry( radius, detail ) {
function IcosahedronGeometry (line 31316) | function IcosahedronGeometry( radius, detail ) {
function IcosahedronBufferGeometry (line 31337) | function IcosahedronBufferGeometry( radius, detail ) {
function DodecahedronGeometry (line 31375) | function DodecahedronGeometry( radius, detail ) {
function DodecahedronBufferGeometry (line 31396) | function DodecahedronBufferGeometry( radius, detail ) {
function TubeGeometry (line 31463) | function TubeGeometry( path, tubularSegments, radius, radialSegments, cl...
function TubeBufferGeometry (line 31499) | function TubeBufferGeometry( path, tubularSegments, radius, radialSegmen...
function TorusKnotGeometry (line 31674) | function TorusKnotGeometry( radius, tube, tubularSegments, radialSegment...
function TorusKnotBufferGeometry (line 31701) | function TorusKnotBufferGeometry( radius, tube, tubularSegments, radialS...
function TorusGeometry (line 31860) | function TorusGeometry( radius, tube, radialSegments, tubularSegments, a...
function TorusBufferGeometry (line 31884) | function TorusBufferGeometry( radius, tube, radialSegments, tubularSegme...
function snip (line 32026) | function snip( contour, u, v, w, n, verts ) {
function removeDupEndPts (line 32180) | function removeDupEndPts(points) {
function point_in_segment_2D_colin (line 32195) | function point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) {
function intersect_segments_2D (line 32226) | function intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2P...
function isPointInsideAngle (line 32399) | function isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt...
function removeHoles (line 32442) | function removeHoles( contour, holes ) {
function ExtrudeGeometry (line 32706) | function ExtrudeGeometry( shapes, options ) {
function ExtrudeBufferGeometry (line 32727) | function ExtrudeBufferGeometry( shapes, options ) {
function scalePt2 (line 32903) | function scalePt2( pt, vec, size ) {
function getBevelVec (line 32919) | function getBevelVec( inPt, inPrev, inNext ) {
function buildLidFaces (line 33238) | function buildLidFaces() {
function buildSideFaces (line 33296) | function buildSideFaces() {
function sidewalls (line 33319) | function sidewalls( contour, layeroffset ) {
function v (line 33353) | function v( x, y, z ) {
function f3 (line 33362) | function f3( a, b, c ) {
function f4 (line 33377) | function f4( a, b, c, d, wallContour, stepIndex, stepsLength, contourInd...
function addVertex (line 33401) | function addVertex( index ) {
function addUV (line 33411) | function addUV( vector2 ) {
function TextGeometry (line 33506) | function TextGeometry( text, parameters ) {
function TextBufferGeometry (line 33527) | function TextBufferGeometry( text, parameters ) {
function SphereGeometry (line 33569) | function SphereGeometry( radius, widthSegments, heightSegments, phiStart...
function SphereBufferGeometry (line 33595) | function SphereBufferGeometry( radius, widthSegments, heightSegments, ph...
function RingGeometry (line 33713) | function RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegme...
function RingBufferGeometry (line 33738) | function RingBufferGeometry( innerRadius, outerRadius, thetaSegments, ph...
function LatheGeometry (line 33859) | function LatheGeometry( points, segments, phiStart, phiLength ) {
function LatheBufferGeometry (line 33882) | function LatheBufferGeometry( points, segments, phiStart, phiLength ) {
function ShapeGeometry (line 34035) | function ShapeGeometry( shapes, curveSegments ) {
function ShapeBufferGeometry (line 34064) | function ShapeBufferGeometry( shapes, curveSegments ) {
function EdgesGeometry (line 34202) | function EdgesGeometry( geometry, thresholdAngle ) {
function CylinderGeometry (line 34310) | function CylinderGeometry( radiusTop, radiusBottom, height, radialSegmen...
function CylinderBufferGeometry (line 34337) | function CylinderBufferGeometry( radiusTop, radiusBottom, height, radial...
function ConeGeometry (line 34617) | function ConeGeometry( radius, height, radialSegments, heightSegments, o...
function ConeBufferGeometry (line 34640) | function ConeBufferGeometry( radius, height, radialSegments, heightSegme...
function CircleGeometry (line 34669) | function CircleGeometry( radius, segments, thetaStart, thetaLength ) {
function CircleBufferGeometry (line 34692) | function CircleBufferGeometry( radius, segments, thetaStart, thetaLength...
function ShadowMaterial (line 34830) | function ShadowMaterial( parameters ) {
function RawShaderMaterial (line 34855) | function RawShaderMaterial( parameters ) {
function MeshStandardMaterial (line 34919) | function MeshStandardMaterial( parameters ) {
function MeshPhysicalMaterial (line 35046) | function MeshPhysicalMaterial( parameters ) {
function MeshPhongMaterial (line 35133) | function MeshPhongMaterial( parameters ) {
function MeshToonMaterial (line 35252) | function MeshToonMaterial( parameters ) {
function MeshNormalMaterial (line 35307) | function MeshNormalMaterial( parameters ) {
function MeshLambertMaterial (line 35405) | function MeshLambertMaterial( parameters ) {
function LineDashedMaterial (line 35507) | function LineDashedMaterial( parameters ) {
function LoadingManager (line 35608) | function LoadingManager( onLoad, onProgress, onError ) {
function FileLoader (line 35679) | function FileLoader( manager ) {
function CompressedTextureLoader (line 35922) | function CompressedTextureLoader( manager ) {
function loadTexture (line 35946) | function loadTexture( i ) {
function DataTextureLoader (line 36056) | function DataTextureLoader( manager ) {
function ImageLoader (line 36142) | function ImageLoader( manager ) {
function CubeTextureLoader (line 36241) | function CubeTextureLoader( manager ) {
function loadTexture (line 36261) | function loadTexture( i ) {
function TextureLoader (line 36311) | function TextureLoader( manager ) {
function Light (line 36369) | function Light( color, intensity ) {
function HemisphereLight (line 36425) | function HemisphereLight( skyColor, groundColor, intensity ) {
function LightShadow (line 36462) | function LightShadow( camera ) {
function SpotLightShadow (line 36518) | function SpotLightShadow() {
function SpotLight (line 36555) | function SpotLight( color, intensity, distance, angle, penumbra, decay ) {
function PointLight (line 36618) | function PointLight( color, intensity, distance, decay ) {
function DirectionalLightShadow (line 36670) | function DirectionalLightShadow( ) {
function DirectionalLight (line 36687) | function DirectionalLight( color, intensity ) {
function AmbientLight (line 36726) | function AmbientLight( color, intensity ) {
function RectAreaLight (line 36748) | function RectAreaLight( color, intensity, width, height ) {
function compareTime (line 36848) | function compareTime( i, j ) {
function Interpolant (line 36985) | function Interpolant( parameterPositions, sampleValues, sampleSize, resu...
function CubicInterpolant (line 37229) | function CubicInterpolant( parameterPositions, sampleValues, sampleSize,...
function LinearInterpolant (line 37374) | function LinearInterpolant( parameterPositions, sampleValues, sampleSize...
function DiscreteInterpolant (line 37418) | function DiscreteInterpolant( parameterPositions, sampleValues, sampleSi...
function KeyframeTrackConstructor (line 37792) | function KeyframeTrackConstructor( name, times, values, interpolation ) {
function VectorKeyframeTrack (line 37824) | function VectorKeyframeTrack( name, times, values, interpolation ) {
function QuaternionLinearInterpolant (line 37849) | function QuaternionLinearInterpolant( parameterPositions, sampleValues, ...
function QuaternionKeyframeTrack (line 37891) | function QuaternionKeyframeTrack( name, times, values, interpolation ) {
function NumberKeyframeTrack (line 37928) | function NumberKeyframeTrack( name, times, values, interpolation ) {
function StringKeyframeTrack (line 37957) | function StringKeyframeTrack( name, times, values, interpolation ) {
function BooleanKeyframeTrack (line 37989) | function BooleanKeyframeTrack( name, times, values ) {
function ColorKeyframeTrack (line 38024) | function ColorKeyframeTrack( name, times, values, interpolation ) {
function KeyframeTrack (line 38057) | function KeyframeTrack( name, times, values, interpolation ) {
function AnimationClip (line 38199) | function AnimationClip( name, duration, tracks ) {
function MaterialLoader (line 38544) | function MaterialLoader( manager ) {
function getTexture (line 38576) | function getTexture( name ) {
function BufferGeometryLoader (line 38700) | function BufferGeometryLoader( manager ) {
function Loader (line 38798) | function Loader() {
function loadTexture (line 38890) | function loadTexture( path, repeat, offset, wrap, anisotropy ) {
function JSONLoader (line 39130) | function JSONLoader( manager ) {
function parseModel (line 39199) | function parseModel( json, geometry ) {
function parseSkin (line 39501) | function parseSkin( json, geometry ) {
function parseMorphing (line 39546) | function parseMorphing( json, geometry ) {
function parseAnimations (line 39593) | function parseAnimations( json, geometry ) {
function ObjectLoader (line 39691) | function ObjectLoader( manager ) {
function loadImage (line 40049) | function loadImage( url ) {
function parseConstant (line 40090) | function parseConstant( value, type ) {
function getGeometry (line 40162) | function getGeometry( name ) {
function getMaterial (line 40174) | function getMaterial( name ) {
function CatmullRom (line 40470) | function CatmullRom( t, p0, p1, p2, p3 ) {
function QuadraticBezierP0 (line 40482) | function QuadraticBezierP0( t, p ) {
function QuadraticBezierP1 (line 40489) | function QuadraticBezierP1( t, p ) {
function QuadraticBezierP2 (line 40495) | function QuadraticBezierP2( t, p ) {
function QuadraticBezier (line 40501) | function QuadraticBezier( t, p0, p1, p2 ) {
function CubicBezierP0 (line 40510) | function CubicBezierP0( t, p ) {
function CubicBezierP1 (line 40517) | function CubicBezierP1( t, p ) {
function CubicBezierP2 (line 40524) | function CubicBezierP2( t, p ) {
function CubicBezierP3 (line 40530) | function CubicBezierP3( t, p ) {
function CubicBezier (line 40536) | function CubicBezier( t, p0, p1, p2, p3 ) {
function Curve (line 40578) | function Curve() {
function LineCurve (line 40921) | function LineCurve( v1, v2 ) {
function CurvePath (line 40976) | function CurvePath() {
function EllipseCurve (line 41202) | function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle,...
function SplineCurve (line 41286) | function SplineCurve( points /* array of Vector2 */ ) {
function CubicBezierCurve (line 41319) | function CubicBezierCurve( v0, v1, v2, v3 ) {
function QuadraticBezierCurve (line 41344) | function QuadraticBezierCurve( v0, v1, v2 ) {
function Path (line 41493) | function Path( points ) {
function Shape (line 41520) | function Shape() {
function ShapePath (line 41572) | function ShapePath() {
function toShapesNoHoles (line 41615) | function toShapesNoHoles( inSubpaths ) {
function isPointInsidePolygon (line 41634) | function isPointInsidePolygon( inPt, inPolygon ) {
function Font (line 41847) | function Font( data ) {
function createPaths (line 41859) | function createPaths( text ) {
function createPath (line 41892) | function createPath( c, scale, offsetX, offsetY ) {
function FontLoader (line 42025) | function FontLoader( manager ) {
function AudioLoader (line 42097) | function AudioLoader( manager ) {
function StereoCamera (line 42129) | function StereoCamera() {
function CubeCamera (line 42224) | function CubeCamera( near, far, cubeResolution ) {
function AudioListener (line 42326) | function AudioListener() {
function Audio (line 42450) | function Audio( listener ) {
function PositionalAudio (line 42746) | function PositionalAudio( listener ) {
function AudioAnalyser (line 42836) | function AudioAnalyser( audio, fftSize ) {
function PropertyMixer (line 42883) | function PropertyMixer( binding, typeName, valueSize ) {
function Composite (line 43088) | function Composite( targetGroup, path, optionalParsedPath ) {
function PropertyBinding (line 43153) | function PropertyBinding( rootNode, path, parsedPath ) {
function AnimationObjectGroup (line 43838) | function AnimationObjectGroup( var_args ) {
function AnimationAction (line 44186) | function AnimationAction( mixer, clip, localRoot ) {
function AnimationMixer (line 44846) | function AnimationMixer( root ) {
method total (line 45024) | get total() { return scope._actions.length; }
method inUse (line 45025) | get inUse() { return scope._nActiveActions; }
method total (line 45028) | get total() { return scope._bindings.length; }
method inUse (line 45029) | get inUse() { return scope._nActiveBindings; }
method total (line 45032) | get total() { return scope._controlInterpolants.length; }
method inUse (line 45033) | get inUse() { return scope._nActiveControlInterpolants; }
function Uniform (line 45566) | function Uniform( value ) {
function InstancedBufferGeometry (line 45589) | function InstancedBufferGeometry() {
function InterleavedBufferAttribute (line 45654) | function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset...
function InterleavedBuffer (line 45792) | function InterleavedBuffer( array, stride ) {
function InstancedInterleavedBuffer (line 45900) | function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {
function InstancedBufferAttribute (line 45930) | function InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {
function Raycaster (line 45962) | function Raycaster( origin, direction, near, far ) {
function ascSort (line 45989) | function ascSort( a, b ) {
function intersectObject (line 45995) | function intersectObject( object, raycaster, intersects, recursive ) {
function Clock (line 46088) | function Clock( autoStart ) {
function Spherical (line 46165) | function Spherical( radius, phi, theta ) {
function Cylindrical (line 46242) | function Cylindrical( radius, theta, y ) {
function ImmediateRenderObject (line 46296) | function ImmediateRenderObject( material ) {
function VertexNormalsHelper (line 46315) | function VertexNormalsHelper( object, size, hex, linewidth ) {
function SpotLightHelper (line 46460) | function SpotLightHelper( light, color ) {
function getBoneList (line 46556) | function getBoneList( object ) {
function SkeletonHelper (line 46576) | function SkeletonHelper( object ) {
function PointLightHelper (line 46670) | function PointLightHelper( light, sphereSize, color ) {
function RectAreaLightHelper (line 46757) | function RectAreaLightHelper( light, color ) {
function HemisphereLightHelper (line 46831) | function HemisphereLightHelper( light, size, color ) {
function GridHelper (line 46914) | function GridHelper( size, divisions, color1, color2 ) {
function PolarGridHelper (line 46960) | function PolarGridHelper( radius, radials, circles, divisions, color1, c...
function FaceNormalsHelper (line 47046) | function FaceNormalsHelper( object, size, hex, linewidth ) {
function DirectionalLightHelper (line 47156) | function DirectionalLightHelper( light, size, color ) {
function CameraHelper (line 47249) | function CameraHelper( camera ) {
function setPoint (line 47363) | function setPoint( point, x, y, z ) {
function BoxHelper (line 47443) | function BoxHelper( object, color ) {
function Box3Helper (line 47539) | function Box3Helper( box, hex ) {
function PlaneHelper (line 47586) | function PlaneHelper( plane, size, hex ) {
function ArrowHelper (line 47656) | function ArrowHelper( dir, origin, length, color, headLength, headWidth ) {
function AxisHelper (line 47752) | function AxisHelper( size ) {
function CubicPoly (line 47803) | function CubicPoly() {
function CatmullRomCurve3 (line 47865) | function CatmullRomCurve3( points ) {
function CubicBezierCurve3 (line 47958) | function CubicBezierCurve3( v0, v1, v2, v3 ) {
function QuadraticBezierCurve3 (line 47984) | function QuadraticBezierCurve3( v0, v1, v2 ) {
function LineCurve3 (line 48009) | function LineCurve3( v1, v2 ) {
function ArcCurve (line 48039) | function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
function Face4 (line 48091) | function Face4( a, b, c, d, normal, color, materialIndex ) {
function MeshFaceMaterial (line 48102) | function MeshFaceMaterial( materials ) {
function MultiMaterial (line 48109) | function MultiMaterial( materials ) {
function PointCloud (line 48125) | function PointCloud( geometry, material ) {
function Particle (line 48132) | function Particle( material ) {
function ParticleSystem (line 48139) | function ParticleSystem( geometry, material ) {
function PointCloudMaterial (line 48146) | function PointCloudMaterial( parameters ) {
function ParticleBasicMaterial (line 48153) | function ParticleBasicMaterial( parameters ) {
function ParticleSystemMaterial (line 48160) | function ParticleSystemMaterial( parameters ) {
function Vertex (line 48167) | function Vertex( x, y, z ) {
function DynamicBufferAttribute (line 48176) | function DynamicBufferAttribute( array, itemSize ) {
function Int8Attribute (line 48183) | function Int8Attribute( array, itemSize ) {
function Uint8Attribute (line 48190) | function Uint8Attribute( array, itemSize ) {
function Uint8ClampedAttribute (line 48197) | function Uint8ClampedAttribute( array, itemSize ) {
function Int16Attribute (line 48204) | function Int16Attribute( array, itemSize ) {
function Uint16Attribute (line 48211) | function Uint16Attribute( array, itemSize ) {
function Int32Attribute (line 48218) | function Int32Attribute( array, itemSize ) {
function Uint32Attribute (line 48225) | function Uint32Attribute( array, itemSize ) {
function Float32Attribute (line 48232) | function Float32Attribute( array, itemSize ) {
function Float64Attribute (line 48239) | function Float64Attribute( array, itemSize ) {
function ClosedSplineCurve3 (line 48262) | function ClosedSplineCurve3( points ) {
function SplineCurve3 (line 48276) | function SplineCurve3( points ) {
function Spline (line 48289) | function Spline( points ) {
function BoundingBoxHelper (line 48321) | function BoundingBoxHelper( object, color ) {
function EdgesHelper (line 48328) | function EdgesHelper( object, hex ) {
function WireframeHelper (line 48347) | function WireframeHelper( object, hex ) {
function XHRLoader (line 48356) | function XHRLoader( manager ) {
function BinaryTextureLoader (line 48363) | function BinaryTextureLoader( manager ) {
function Projector (line 49536) | function Projector() {
function CanvasRenderer (line 49564) | function CanvasRenderer() {
function load (line 50022) | function load ( url, readyCallback, progressCallback, failCallback ) {
function parse (line 50098) | function parse( text, callBack, url ) {
function parseAsset (line 50179) | function parseAsset () {
function parseLib (line 50218) | function parseLib ( q, classSpec, prefix ) {
function parseScene (line 50242) | function parseScene() {
function parseKinematicsModel (line 50259) | function parseKinematicsModel() {
function createAnimations (line 50276) | function createAnimations() {
function recurseHierarchy (line 50285) | function recurseHierarchy( node ) {
function calcAnimationBounds (line 50342) | function calcAnimationBounds () {
function createMorph (line 50370) | function createMorph ( geometry, ctrl ) {
function createSkin (line 50408) | function createSkin ( geometry, ctrl, applyBindShape ) {
function setupSkeleton (line 50461) | function setupSkeleton ( node, bones, frame, parent ) {
function setupSkinningMatrices (line 50499) | function setupSkinningMatrices ( bones, skin ) {
function flattenSkeleton (line 50562) | function flattenSkeleton(skeleton) {
function skinToBindPose (line 50594) | function skinToBindPose(geometry,skeleton,skinController) {
function applySkin (line 50642) | function applySkin( geometry, instanceCtrl, frame ) {
function createKinematics (line 50792) | function createKinematics() {
function createSceneGraph (line 51000) | function createSceneGraph ( node, parent ) {
function getJointId (line 51300) | function getJointId( skin, id ) {
function getLibraryNode (line 51314) | function getLibraryNode( id ) {
function getChannelsForNode (line 51334) | function getChannelsForNode ( node ) {
function calcFrameDuration (line 51375) | function calcFrameDuration( node ) {
function calcMatrixAt (line 51396) | function calcMatrixAt( node, t ) {
function bakeAnimations (line 51465) | function bakeAnimations ( node ) {
function findKey (line 51557) | function findKey ( keys, time) {
function findTimeNdx (line 51581) | function findTimeNdx ( keys, time) {
function interpolateKeys (line 51601) | function interpolateKeys ( keys, key, ndx, fullSid ) {
function getNextKeyWith (line 51642) | function getNextKeyWith( keys, fullSid, ndx ) {
function getPrevKeyWith (line 51662) | function getPrevKeyWith( keys, fullSid, ndx ) {
function _Image (line 51682) | function _Image() {
function Controller (line 51709) | function Controller() {
function Morph (line 51753) | function Morph() {
function Skin (line 51850) | function Skin() {
function VisualScene (line 52032) | function VisualScene () {
function Node (line 52106) | function Node() {
function Transform (line 52338) | function Transform () {
function InstanceController (line 52578) | function InstanceController() {
function InstanceMaterial (line 52631) | function InstanceMaterial () {
function InstanceGeometry (line 52646) | function InstanceGeometry() {
function Geometry (line 52684) | function Geometry() {
function Mesh (line 52722) | function Mesh( geometry ) {
function Polygons (line 53079) | function Polygons () {
function Polylist (line 53146) | function Polylist () {
function LineStrips (line 53157) | function LineStrips() {
function Triangles (line 53168) | function Triangles () {
function Accessor (line 53179) | function Accessor() {
function Vertices (line 53214) | function Vertices() {
function Input (line 53239) | function Input () {
function Source (line 53265) | function Source ( id ) {
function Material (line 53374) | function Material () {
function ColorOrTexture (line 53402) | function ColorOrTexture () {
function Shader (line 53540) | function Shader ( type, effect ) {
function Surface (line 53812) | function Surface ( effect ) {
function Sampler2D (line 53852) | function Sampler2D ( effect ) {
function Effect (line 53916) | function Effect () {
function InstanceEffect (line 54123) | function InstanceEffect () {
function Animation (line 54136) | function Animation() {
function Channel (line 54206) | function Channel( animation ) {
function Sampler (line 54266) | function Sampler ( animation ) {
function Key (line 54429) | function Key ( time ) {
function Camera (line 54542) | function Camera() {
function InstanceCamera (line 54662) | function InstanceCamera() {
function Light (line 54678) | function Light() {
function InstanceLight (line 54791) | function InstanceLight() {
function KinematicsModel (line 54805) | function KinematicsModel( ) {
function Joint (line 54872) | function Joint( ) {
function Link (line 54941) | function Link( ) {
function Attachment (line 54987) | function Attachment( ) {
function _source (line 55030) | function _source( element ) {
function _nsResolver (line 55045) | function _nsResolver( nsPrefix ) {
function _bools (line 55057) | function _bools( str ) {
function _floats (line 55072) | function _floats( str ) {
function _ints (line 55087) | function _ints( str ) {
function _strings (line 55102) | function _strings( str ) {
function _trimString (line 55108) | function _trimString( str ) {
function _attr_as_float (line 55114) | function _attr_as_float( element, name, defaultValue ) {
function _attr_as_int (line 55128) | function _attr_as_int( element, name, defaultValue ) {
function _attr_as_string (line 55142) | function _attr_as_string( element, name, defaultValue ) {
function _format_float (line 55156) | function _format_float( f, num ) {
function loadTextureImage (line 55187) | function loadTextureImage ( texture, url ) {
function extractDoubleSided (line 55200) | function extractDoubleSided( obj, element ) {
function setUpConversion (line 55220) | function setUpConversion() {
function fixCoords (line 55251) | function fixCoords( data, sign ) {
function getConvertedTranslation (line 55309) | function getConvertedTranslation( axis, data ) {
function getConvertedVec3 (line 55334) | function getConvertedVec3( data, offset ) {
function getConvertedMat4 (line 55342) | function getConvertedMat4( data ) {
function getConvertedIndex (line 55399) | function getConvertedIndex( index ) {
function getConvertedMember (line 55415) | function getConvertedMember( member ) {
function GLTFLoader (line 55514) | function GLTFLoader( manager ) {
function GLTFRegistry (line 55644) | function GLTFRegistry() {
function GLTFLightsExtension (line 55710) | function GLTFLightsExtension( json ) {
function GLTFMaterialsCommonExtension (line 55794) | function GLTFMaterialsCommonExtension( json ) {
function GLTFBinaryExtension (line 55897) | function GLTFBinaryExtension( data ) {
function GLTFMaterialsPbrSpecularGlossinessExtension (line 55963) | function GLTFMaterialsPbrSpecularGlossinessExtension() {
function _each (line 56429) | function _each( object, callback, thisObj ) {
function resolveURL (line 56514) | function resolveURL( url, path ) {
function convertUint8ArrayToString (line 56546) | function convertUint8ArrayToString( array ) {
function createDefaultMaterial (line 56572) | function createDefaultMaterial() {
function addMorphTargets (line 56593) | function addMorphTargets ( mesh, meshDef, primitiveDef, dependencies ) {
function GLTFParser (line 56707) | function GLTFParser( json, extensions, options ) {
function buildNodeHierachy (line 57833) | function buildNodeHierachy( nodeId, parentObject, allNodes ) {
function resolveURL (line 58265) | function resolveURL( baseUrl, url ) {
function setMapForType (line 58277) | function setMapForType( mapType, value ) {
function ParserState (line 58477) | function ParserState() {
function OBJLoader (line 58780) | function OBJLoader( manager ) {
function trim (line 59139) | function trim(str){
function VRFrameData (line 59291) | function VRFrameData() {
function VRDisplay (line 59302) | function VRDisplay() {
function applyFullscreenElementStyle (line 59393) | function applyFullscreenElementStyle() {
function VRDevice (line 59697) | function VRDevice() {
function HMDVRDevice (line 59707) | function HMDVRDevice() {
function PositionSensorVRDevice (line 59714) | function PositionSensorVRDevice() {
function CardboardDistorter (line 59773) | function CardboardDistorter(gl) {
function CardboardUI (line 60453) | function CardboardUI(gl) {
function addGearSegment (line 60548) | function addGearSegment(theta, r) {
function addArrowVertex (line 60571) | function addArrowVertex(x, y) {
function CardboardVRDisplay (line 60695) | function CardboardVRDisplay() {
function WGLUPreserveGLState (line 60952) | function WGLUPreserveGLState(gl, bindings, callback) {
function Device (line 61078) | function Device(params) {
function DeviceInfo (line 61142) | function DeviceInfo(deviceParams) {
function CardboardViewer (line 61398) | function CardboardViewer(params) {
function VRDisplayHMDDevice (line 61447) | function VRDisplayHMDDevice(display) {
function VRDisplayPositionSensorDevice (line 61487) | function VRDisplayPositionSensorDevice(display) {
function Distortion (line 61521) | function Distortion(coefficients) {
function Dpdb (line 63175) | function Dpdb(fetchOnline, onDeviceParamsUpdated) {
function DeviceParams (line 63315) | function DeviceParams(params) {
function MouseKeyboardVRDisplay (line 63807) | function MouseKeyboardVRDisplay() {
function RotateInstructions (line 63987) | function RotateInstructions() {
function ComplementaryFilter (line 64149) | function ComplementaryFilter(kFilter) {
function FusionPoseSensor (line 64307) | function FusionPoseSensor() {
function PosePredictor (line 64536) | function PosePredictor(predictionTimeS) {
function SensorSample (line 64593) | function SensorSample(sample, timestampS) {
function TouchPanner (line 64631) | function TouchPanner() {
function mat4_perspectiveFromFieldOfView (line 64963) | function mat4_perspectiveFromFieldOfView(out, fov, near, far) {
function mat4_fromRotationTranslation (line 64990) | function mat4_fromRotationTranslation(out, q, v) {
function mat4_translate (line 65027) | function mat4_translate(out, a, v) {
function mat4_invert (line 65056) | function mat4_invert(out, a) {
function updateEyeMatrices (line 65106) | function updateEyeMatrices(projection, view, pose, parameters, vrDisplay) {
function ViewerSelector (line 65191) | function ViewerSelector() {
function AndroidWakeLock (line 65399) | function AndroidWakeLock() {
function iOSWakeLock (line 65424) | function iOSWakeLock() {
function getWakeLock (line 65445) | function getWakeLock() {
function WebVRPolyfill (line 65484) | function WebVRPolyfill() {
function InstallWebVRSpecShim (line 65717) | function InstallWebVRSpecShim() {
function idxOf (line 65775) | function idxOf(text, chr, start, end) {
function isWhitespace (line 65782) | function isWhitespace(chr) {
function pre (line 65786) | function pre(measure, text, start, end, width) {
function greedy (line 65806) | function greedy(measure, text, start, end, width, mode) {
function monospace (line 65864) | function monospace(text, start, end, width) {
function forEachArray (line 65890) | function forEachArray(array, iterator) {
function isEmpty (line 65896) | function isEmpty(obj){
function initParams (line 65903) | function initParams(uri, options, callback) {
function createXHR (line 65919) | function createXHR(uri, options, callback) {
function _createXHR (line 65924) | function _createXHR(options) {
function getXml (line 66100) | function getXml(xhr) {
function noop (line 66112) | function noop() {}
function extend (line 66148) | function extend() {
function addCanvasListeners (line 66605) | function addCanvasListeners () {
function getGestureEventName (line 67751) | function getGestureEventName (gesture, active) {
function isViveController (line 67769) | function isViveController (trackedControls) {
function createRay (line 67845) | function createRay (evt) {
function hideRay (line 67877) | function hideRay () {
function isEqualVec3 (line 68252) | function isEqualVec3 (a, b) {
function enableGrabCursor (line 68972) | function enableGrabCursor () { sceneEl.canvas.classList.add('a-grab-curs...
function disableGrabCursor (line 68973) | function disableGrabCursor () { sceneEl.canvas.classList.remove('a-grab-...
function isNullVector (line 68992) | function isNullVector (vector) {
function parseSide (line 69166) | function parseSide (side) {
function parseVertexColors (line 69184) | function parseVertexColors (coloring) {
function disposeMaterial (line 69201) | function disposeMaterial (material, system) {
function copyArray (line 69831) | function copyArray (a, b) {
function getFog (line 69973) | function getFog (data) {
function getFuzzyPatchVersion (line 69996) | function getFuzzyPatchVersion (version) {
function setup (line 70291) | function setup () {
function createStats (line 70550) | function createStats (scene) {
function createEnterVRButton (line 70677) | function createEnterVRButton (enterVRHandler) {
function createOrientationModal (line 70702) | function createOrientationModal (exitVRHandler) {
function parseSide (line 71322) | function parseSide (side) {
function coerceData (line 71340) | function coerceData (data) {
function loadFont (line 71356) | function loadFont (src, yOffset) {
function loadTexture (line 71377) | function loadTexture (src) {
function createShader (line 71388) | function createShader (el, shaderName, data) {
function updateBaseMaterial (line 71412) | function updateBaseMaterial (material, data) {
function computeWidth (line 71420) | function computeWidth (wrapPixels, wrapCount, widthFactor) {
function computeFontWidthFactor (line 71427) | function computeFontWidthFactor (font) {
function PromiseCache (line 71445) | function PromiseCache () {
function isEmptyObject (line 72262) | function isEmptyObject (keys) {
function getImmediateChildByName (line 72588) | function getImmediateChildByName (object3d, value) {
function cloneValue (line 73194) | function cloneValue (val) {
function getAnimationValues (line 73217) | function getAnimationValues (el, attribute, dataFrom, dataTo, currentVal...
function strToBool (line 73352) | function strToBool (str) {
function boolToNum (line 73363) | function boolToNum (bool) {
function componentToHex (line 73372) | function componentToHex (color) {
function convertToIntegerColor (line 73383) | function convertToIntegerColor (color) {
function rgbVectorToHex (line 73392) | function rgbVectorToHex (color) {
function mediaElementLoaded (line 73535) | function mediaElementLoaded (el) {
function fixUpMediaElement (line 73571) | function fixUpMediaElement (mediaEl) {
function setCrossOrigin (line 73596) | function setCrossOrigin (mediaEl) {
function extractDomain (line 73627) | function extractDomain (url) {
function inferResponseType (line 73644) | function inferResponseType (src) {
function checkComponentDefined (line 74566) | function checkComponentDefined (el, name) {
function isComponentMixedIn (line 74582) | function isComponentMixedIn (name, mixinEls) {
function mergeComponentData (line 74599) | function mergeComponentData (attrValue, extraData) {
function isComponent (line 74612) | function isComponent (componentName) {
function addTagName (line 75007) | function addTagName (tagName) {
function wrapANodeMethods (line 75056) | function wrapANodeMethods (obj) {
function wrapAEntityMethods (line 75075) | function wrapAEntityMethods (obj) {
function wrapMethods (line 75105) | function wrapMethods (targetObj, methodList, derivedObj, baseObj) {
function wrapMethod (line 75121) | function wrapMethod (obj, methodName, derivedObj, baseObj) {
function copyProperties (line 75148) | function copyProperties (source, destination) {
function cloneData (line 75642) | function cloneData (data) {
function extendProperties (line 75663) | function extendProperties (dest, source, isSinglePropSchema) {
function hasBehavior (line 75671) | function hasBehavior (component) {
function wrapPause (line 75681) | function wrapPause (pauseMethod) {
function wrapPlay (line 75700) | function wrapPlay (playMethod) {
function registerPropertyType (line 75826) | function registerPropertyType (type, defaultValue, parse, stringify) {
function arrayParse (line 75840) | function arrayParse (value) {
function arrayStringify (line 75847) | function arrayStringify (value) {
function assetParse (line 75859) | function assetParse (value) {
function defaultParse (line 75889) | function defaultParse (value) {
function defaultStringify (line 75893) | function defaultStringify (value) {
function boolParse (line 75898) | function boolParse (value) {
function intParse (line 75902) | function intParse (value) {
function numberParse (line 75906) | function numberParse (value) {
function selectorParse (line 75910) | function selectorParse (value) {
function selectorAllParse (line 75921) | function selectorAllParse (value) {
function selectorStringify (line 75927) | function selectorStringify (value) {
function selectorAllStringify (line 75934) | function selectorAllStringify (value) {
function srcParse (line 75943) | function srcParse (value) {
function vecParse (line 75948) | function vecParse (value) {
function isValidDefaultValue (line 75959) | function isValidDefaultValue (type, defaultVal) {
function isValidDefaultCoordinate (line 75990) | function isValidDefaultCoordinate (possibleCoordinates, dimensions) {
function enterVRSuccess (line 76269) | function enterVRSuccess () {
function enterVRFailure (line 76289) | function enterVRFailure (err) {
function exitVRSuccess (line 76326) | function exitVRSuccess () {
function exitVRFailure (line 76339) | function exitVRFailure (err) {
function startRender (line 76526) | function startRender (sceneEl) {
function play (line 76563) | function play () {
function getCanvasSize (line 76667) | function getCanvasSize (canvasEl, embedded) {
function requestFullscreen (line 76680) | function requestFullscreen (canvas) {
function exitFullscreen (line 76689) | function exitFullscreen () {
function shouldAntiAlias (line 76705) | function shouldAntiAlias (sceneEl) {
function setupCanvas (line 76716) | function setupCanvas (sceneEl) {
function Meta (line 76771) | function Meta (attrs) {
function Link (line 76779) | function Link (attrs) {
function createAndInjectTag (line 76810) | function createAndInjectTag (tagObj) {
function createTag (line 76826) | function createTag (tagObj) {
function postMessageAPIHandler (line 76848) | function postMessageAPIHandler (event) {
function isSingleProperty (line 76899) | function isSingleProperty (schema) {
function processPropertyDefinition (line 76933) | function processPropertyDefinition (propDefinition, componentName) {
function parseProperty (line 77022) | function parseProperty (value, propDefinition) {
function stringifyProperty (line 77054) | function stringifyProperty (value, propDefinition) {
function addMapping (line 77467) | function addMapping (prop) {
function extend (line 77607) | function extend (base, extension) {
function isUndefined (line 77620) | function isUndefined (value) {
function copy (line 77624) | function copy (value) {
function isPureObject (line 77631) | function isPureObject (value) {
function addComponentMapping (line 77667) | function addComponentMapping (componentName, mappings) {
function definePrimitive (line 77681) | function definePrimitive (tagName, defaultComponents, mappings) {
function unCamelCase (line 78032) | function unCamelCase (str) {
function _update (line 78499) | function _update () {
function getEntityCount (line 78506) | function getEntityCount () {
function _start (line 78514) | function _start () {}
function _end (line 78516) | function _end () {}
function _attach (line 78518) | function _attach (r) {
function getMaterialData (line 78634) | function getMaterialData (data) {
function getMaterialData (line 79015) | function getMaterialData (data) {
function removeDefaultCamera (line 79159) | function removeDefaultCamera (sceneEl) {
function createGeometry (line 79268) | function createGeometry (data) {
function decrementCacheCount (line 79282) | function decrementCacheCount (cacheCount, hash) {
function incrementCacheCount (line 79289) | function incrementCacheCount (cacheCount, hash) {
function toBufferGeometry (line 79300) | function toBufferGeometry (geometry, doBuffer) {
function loadImageCb (line 79473) | function loadImageCb (src) { self.loadImage(src, data, cb); }
function loadVideoCb (line 79474) | function loadVideoCb (src) { self.loadVideo(src, data, cb); }
function handleVideoTextureLoaded (line 79530) | function handleVideoTextureLoaded (result) {
function calculateVideoCacheHash (line 79664) | function calculateVideoCacheHash (data, videoEl) {
function loadImageTexture (line 79693) | function loadImageTexture (src, data) {
function setTextureProperties (line 79730) | function setTextureProperties (texture, data) {
function createVideoEl (line 79764) | function createVideoEl (src, width, height) {
function fixVideoAttributes (line 79794) | function fixVideoAttributes (videoEl) {
function parse (line 79955) | function parse (value, defaultVec) {
function stringify (line 79990) | function stringify (data) {
function isCoordinates (line 79999) | function isCoordinates (value) {
function vecParseFloat (line 80009) | function vecParseFloat (vec) {
function getDebugNamespaceType (line 80066) | function getDebugNamespaceType (namespace) {
function getDebugNamespaceColor (line 80080) | function getDebugNamespaceColor (namespace) {
function storage (line 80097) | function storage () {
function checkHeadsetConnected (line 80136) | function checkHeadsetConnected () {
function checkHasPositionalTracking (line 80155) | function checkHasPositionalTracking () {
function isTablet (line 80186) | function isTablet (mockUserAgent) {
function isIOS (line 80192) | function isIOS () {
function isGearVR (line 80197) | function isGearVR () {
function deepEqual (line 80438) | function deepEqual (a, b) {
function copyAttribute (line 80542) | function copyAttribute (key) {
function checkSetMap (line 80635) | function checkSetMap (texture) {
function setMap (line 80641) | function setMap (texture) {
function setMap (line 80692) | function setMap (texture) {
function handleTextureEvents (line 80705) | function handleTextureEvents (el, texture) {
function validateSrc (line 80761) | function validateSrc (src, isImageCb, isVideoCb) {
function validateCubemapSrc (line 80780) | function validateCubemapSrc (src, cb) {
function parseUrl (line 80823) | function parseUrl (src) {
function checkIsImage (line 80835) | function checkIsImage (src, onResult) {
function validateAndGetQuerySelector (line 80857) | function validateAndGetQuerySelector (selector) {
function toCamelCase (line 80912) | function toCamelCase (str) {
function transformKeysToCamelCase (line 80925) | function transformKeysToCamelCase (obj) {
function isControllerPresent (line 80985) | function isControllerPresent (component, idPrefix, queryObject) {
function findMatchingController (line 81022) | function findMatchingController (controllers, filterIdExact, filterIdPre...
function gotVRDisplays (line 81115) | function gotVRDisplays( displays ) {
function gotVRDisplays (line 81307) | function gotVRDisplays( displays ) {
function onVRDisplayPresentChange (line 81388) | function onVRDisplayPresentChange() {
function fovToNDCScaleOffset (line 81693) | function fovToNDCScaleOffset( fov ) {
function fovPortToProjection (line 81703) | function fovPortToProjection( fov, rightHanded, zNear, zFar ) {
function fovToProjection (line 81749) | function fovToProjection( fov, rightHanded, zNear, zFar ) {
function _h (line 81779) | function _h ( f, c ) {
function _update (line 81829) | function _update () {
function _start (line 81840) | function _start () {
function _end (line 81850) | function _end () {}
function _attach (line 81852) | function _attach ( r ) {
function _update (line 81907) | function _update () {
function _start (line 81919) | function _start () {}
function _end (line 81921) | function _end () {}
function _attach (line 81923) | function _attach ( r ) {
function _size (line 81985) | function _size ( v ) {
function _update (line 81993) | function _update () {
function _start (line 82001) | function _start () {
function _end (line 82005) | function _end () {}
function _attach (line 82007) | function _attach ( r ) {
function iterateKeys (line 82069) | function iterateKeys ( array, callback ) {
function importCSS (line 82076) | function importCSS ( url ) {
function Graph (line 82103) | function Graph ( _dom, _id, _defArg ) {
function StackGraph (line 82173) | function StackGraph ( _dom, _num ) {
function PerfCounter (line 82211) | function PerfCounter ( id, group ) {
function sample (line 82322) | function sample () {
function _perf (line 82339) | function _perf ( idArg ) {
function _init (line 82361) | function _init () {
function _update (line 82433) | function _update () {
function AndroidWakeLock (line 82571) | function AndroidWakeLock() {
function iOSWakeLock (line 82592) | function iOSWakeLock() {
function getWakeLock (line 82613) | function getWakeLock() {
FILE: libs/ammo.js/ammo.js
function ia (line 13) | function ia(a){eval.call(null,a)}
function assert (line 17) | function assert(a,b){a||qa("Assertion failed: "+b)}
function ra (line 18) | function ra(a){var b;b="i32";"*"===b.charAt(b.length-1)&&(b="i32");switc...
function wa (line 19) | function wa(a,b,e,f){var g,h;"number"===typeof a?(g=!0,h=a):(g=!1,h=a.le...
function Da (line 21) | function Da(a){var b;if(0===b||!a)return"";for(var e=0,f,g=0;;){f=ya[a+g...
function Fa (line 22) | function Fa(a,b,e,f){if(0<f){f=e+f-1;for(var g=0;g<a.length;++g){var h=a...
function Ga (line 23) | function Ga(a){for(var b=0,e=0;e<a.length;++e){var f=a.charCodeAt(e);552...
function Ha (line 24) | function Ha(a){return a.replace(/__Z[\w\d_]+/g,function(a){var e;a:{var ...
function Ja (line 25) | function Ja(){var a;a:{a=Error();if(!a.stack){try{throw Error(0);}catch(...
function oa (line 26) | function oa(){qa("Cannot enlarge memory arrays. Either (1) compile with ...
function Ra (line 28) | function Ra(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b...
function Ya (line 28) | function Ya(){var a=c.preRun.shift();Sa.unshift(a)}
function Za (line 29) | function Za(a){var b=Array(Ga(a)+1);Fa(a,b,0,b.length);return b}
function ib (line 166) | function ib(){return!!ib.d}
function mb (line 166) | function mb(a,b){mb.d||(mb.d={});a in mb.d||(c.dynCall_v(b),mb.d[a]=1)}
function qb (line 166) | function qb(){pb+=4;return l[pb-4>>2]}
function Cb (line 169) | function Cb(){var a=jb;if(!a)return(d.e(0),0)|0;var b=lb[a],e=b.type;if(...
function Fb (line 170) | function Fb(a,b){pb=b;try{var e=qb(),f=qb(),g=qb(),h=0;Fb.buffer||(Fb.d=...
function sf (line 193) | function sf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[b+12>>2...
function tf (line 193) | function tf(a,b,d){a=a|0;b=+b;d=+d;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function uf (line 193) | function uf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[b+12>>2...
function vf (line 193) | function vf(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...
function wf (line 193) | function wf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Gb[c[(c[d...
function xf (line 193) | function xf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k...
function yf (line 193) | function yf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0...
function zf (line 193) | function zf(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0...
function Af (line 193) | function Af(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0;f=l;l=l+784|0;c[f...
function Bf (line 193) | function Bf(d,e,f,g,h,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0...
function Cf (line 193) | function Cf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0...
function Df (line 193) | function Df(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Ef (line 193) | function Ef(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0...
function Ff (line 193) | function Ff(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0.0...
function Gf (line 193) | function Gf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Hf (line 193) | function Hf(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0...
function If (line 193) | function If(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,...
function Jf (line 193) | function Jf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function Kf (line 193) | function Kf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Lf (line 193) | function Lf(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0...
function Mf (line 193) | function Mf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Nf (line 193) | function Nf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|...
function Of (line 193) | function Of(a,b,d){a=a|0;b=+b;d=+d;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function Pf (line 193) | function Pf(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;e=c[a+5...
function Qf (line 193) | function Qf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0;c[b+4>>2]=106535321...
function Rf (line 193) | function Rf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0...
function Sf (line 193) | function Sf(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,m=0,n=0...
function Tf (line 193) | function Tf(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=ks(...
function Uf (line 193) | function Uf(b){b=b|0;var d=0,e=0.0,f=0,h=0,i=0.0,j=0.0,k=0;k=l;l=l+64|0;...
function Vf (line 193) | function Vf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0...
function Wf (line 193) | function Wf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0...
function Xf (line 193) | function Xf(b){b=b|0;var d=0;c[b>>2]=4884;d=c[b+176>>2]|0;if(d|0){if(a[b...
function Yf (line 193) | function Yf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function Zf (line 193) | function Zf(a,b,e){a=a|0;b=b|0;e=e|0;Ze(a,b,e)|0;c[b+256>>2]=c[a+264>>2]...
function _f (line 193) | function _f(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0;i=l;l=l+144|...
function $f (line 193) | function $f(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...
function ag (line 193) | function ag(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!(a[d+164>>0...
function bg (line 193) | function bg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;Ed(b,d);c[b>>2]...
function cg (line 193) | function cg(b,d,e,f,h,i,k,l,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;k=k|0;l=...
function dg (line 193) | function dg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;hb[c[(c[b>>2]|0)+32>>2]...
function eg (line 193) | function eg(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0.0,j=0.0,k=0.0;h=l;l=...
function fg (line 193) | function fg(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n...
function gg (line 193) | function gg(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0,l=0,m=0...
function hg (line 193) | function hg(b,d,e,f){b=b|0;d=+d;e=e|0;f=+f;var h=0,i=0.0,j=0,k=0;k=l;l=l...
function ig (line 193) | function ig(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=cs()|0;c[h+4>>2]=...
function jg (line 193) | function jg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0...
function kg (line 193) | function kg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k...
function lg (line 193) | function lg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k...
function mg (line 193) | function mg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0...
function ng (line 193) | function ng(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...
function og (line 193) | function og(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=ks()|0;c[...
function pg (line 193) | function pg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=Gb[c[(c[d>>2]|0)+...
function qg (line 193) | function qg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=ks()|0;c[h+4>>2]=...
function rg (line 193) | function rg(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0,k=0.0,l=0.0,m=0.0...
function sg (line 193) | function sg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k...
function tg (line 193) | function tg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0...
function ug (line 193) | function ug(a,b,d,e,f,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i...
function vg (line 193) | function vg(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;k=l...
function wg (line 193) | function wg(b){b=b|0;var d=0,e=0,f=0;c[b>>2]=4272;if(a[b+272>>0]|0?(d=c[...
function xg (line 193) | function xg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0...
function yg (line 193) | function yg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20...
function zg (line 193) | function zg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0...
function Ag (line 193) | function Ag(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...
function Bg (line 193) | function Bg(b,d){b=b|0;d=d|0;var e=0;e=cs()|0;pj(e,5,b);c[e>>2]=4776;c[e...
function Cg (line 193) | function Cg(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=+f;h=h|0;var i=0...
function Dg (line 193) | function Dg(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var...
function Eg (line 193) | function Eg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+48|0;e=(c[a+48>>2]|0)+4...
function Fg (line 193) | function Fg(b,d,e){b=b|0;d=+d;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0....
function Gg (line 193) | function Gg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0...
function Hg (line 193) | function Hg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k...
function Ig (line 193) | function Ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0...
function Jg (line 193) | function Jg(a){a=a|0;var b=0,d=0,e=0,f=0.0,h=0.0,i=0.0,j=0,k=0.0,l=0.0,m...
function Kg (line 193) | function Kg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0...
function Lg (line 193) | function Lg(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0;i=c[a+28>>2]|...
function Mg (line 193) | function Mg(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var...
function Ng (line 193) | function Ng(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l...
function Og (line 193) | function Og(a,b,e){a=a|0;b=b|0;e=e|0;Sh(a,b,e)|0;c[b+52>>2]=c[a+48>>2];c...
function Pg (line 193) | function Pg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[b+32>>2]|0;if(!...
function Qg (line 193) | function Qg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[6432]=(c[6432]|0)+1;d...
function Rg (line 193) | function Rg(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...
function Sg (line 193) | function Sg(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,k=0...
function Tg (line 193) | function Tg(b,d,e){b=b|0;d=+d;e=e|0;var f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=...
function Ug (line 193) | function Ug(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,j=0,k=...
function Vg (line 193) | function Vg(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;l=(g[j>>2...
function Wg (line 193) | function Wg(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i...
function Xg (line 193) | function Xg(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,m...
function Yg (line 193) | function Yg(b,e,f,h,i,j){b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0;if(...
function Zg (line 193) | function Zg(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0.0,l=0.0;e=c[d...
function _g (line 193) | function _g(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...
function $g (line 193) | function $g(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,l=0,m...
function ah (line 193) | function ah(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function bh (line 193) | function bh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function ch (line 193) | function ch(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...
function dh (line 193) | function dh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+212>>2]|0;a:d...
function eh (line 193) | function eh(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,h=0,i=0,j=0;f=l;l...
function fh (line 193) | function fh(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0;j=lb[c[(c[b>>...
function gh (line 193) | function gh(b,d){b=b|0;d=d|0;var e=0.0,f=0.0;if(a[b+1309>>0]|0){e=(+g[b+...
function hh (line 193) | function hh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0.0,j=0.0;e=l;l...
function ih (line 193) | function ih(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k...
function jh (line 193) | function jh(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;...
function kh (line 193) | function kh(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0,k=0,l=0.0,m=0.0;i...
function lh (line 193) | function lh(a,b,c,d,e,f,h,i,j,k,l,m,n,o){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;...
function mh (line 193) | function mh(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=f|0;var h=0,i=0,j=0,k=0,m=...
function nh (line 193) | function nh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(a[b+165>>0]|0){i...
function oh (line 193) | function oh(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0...
function ph (line 193) | function ph(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!(a[d+164>>0]|0)...
function qh (line 193) | function qh(a,b,d){a=a|0;b=b|0;d=d|0;Sh(a,b,d)|0;c[b+52>>2]=c[a+300>>2];...
function rh (line 193) | function rh(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0,k=0.0,...
function sh (line 193) | function sh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;c[6432]=(c[...
function th (line 193) | function th(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function uh (line 193) | function uh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m...
function vh (line 193) | function vh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0...
function wh (line 193) | function wh(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;Yi(14420);hb[c[(c[...
function xh (line 193) | function xh(b,d){b=b|0;d=d|0;var e=0;c[b>>2]=8964;a[b+40>>0]=1;c[b+36>>2...
function yh (line 193) | function yh(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.0,k=0...
function zh (line 193) | function zh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b+16>>2]|0;if(d|0){if(a...
function Ah (line 193) | function Ah(a,b,e){a=a|0;b=b|0;e=e|0;Sh(a,b,e)|0;c[b+52>>2]=c[a+52>>2];c...
function Bh (line 193) | function Bh(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0...
function Ch (line 193) | function Ch(a,b,c,d,e,f){a=a|0;b=+b;c=c|0;d=+d;e=+e;f=+f;var h=0.0,i=0.0...
function Dh (line 193) | function Dh(){var b=0,d=0,e=0;b=Or(288)|0;c[b+164>>2]=1065353216;c[b+168...
function Eh (line 193) | function Eh(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m...
function Fh (line 193) | function Fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;hb[c[(c[b>>2]|0)+32>>2]...
function Gh (line 193) | function Gh(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=D...
function Hh (line 193) | function Hh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;e=l;l=l+32|0;d=c[b+388>>2...
function Ih (line 193) | function Ih(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0...
function Jh (line 193) | function Jh(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.0;i=l...
function Kh (line 193) | function Kh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.0,n...
function Lh (line 193) | function Lh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=Gb[c[(c[d>>2]|0)+...
function Mh (line 193) | function Mh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0,l...
function Nh (line 193) | function Nh(a,b,d){a=a|0;b=b|0;d=d|0;c[a+300>>2]=c[b>>2];c[a+300+4>>2]=c...
function Oh (line 193) | function Oh(b){b=b|0;var d=0;d=c[b>>2]|0;if(d|0)Sm(b,d);d=c[b+4>>2]|0;if...
function Ph (line 193) | function Ph(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k...
function Qh (line 193) | function Qh(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0...
function Rh (line 193) | function Rh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!e)e=c[b...
function Sh (line 193) | function Sh(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0;c[b>>2]=Gb[c[(c[e>>2]|0...
function Th (line 193) | function Th(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)retu...
function Uh (line 193) | function Uh(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;if(...
function Vh (line 193) | function Vh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c[b>>2]=9504;d=c[b+...
function Wh (line 193) | function Wh(b){b=b|0;var d=0;c[b>>2]=8576;d=c[b+156>>2]|0;if(d|0){if(a[b...
function Xh (line 193) | function Xh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((b|0)==0?1:(c[b+...
function Yh (line 193) | function Yh(b){b=b|0;var d=0;c[b>>2]=9136;d=c[b+160>>2]|0;if(d|0){if(a[b...
function Zh (line 193) | function Zh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0,j=0,k=0.0...
function _h (line 193) | function _h(b){b=b|0;var d=0;c[b>>2]=4944;d=c[b+144>>2]|0;if(d|0){if(a[b...
function $h (line 193) | function $h(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function ai (line 193) | function ai(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;i=l...
function bi (line 193) | function bi(b){b=b|0;var d=0;if((a[22648]|0)==0?jy(22648)|0:0){if((a[226...
function ci (line 193) | function ci(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function di (line 193) | function di(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;i=l...
function ei (line 193) | function ei(b){b=b|0;var d=0,e=0,f=0,h=0;c[b+32>>2]=262144;h=c[b+4>>2]|0...
function fi (line 193) | function fi(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;f=c[b+9...
function gi (line 193) | function gi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=c[d+4>>2]|0;f...
function hi (line 193) | function hi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+96|0;b=c[b>>2]|0;if...
function ii (line 193) | function ii(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0,k=0;k=l;l...
function ji (line 193) | function ji(a,b,c,d,e,f,h,i,j,k,l){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;h=+h;...
function ki (line 193) | function ki(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=8848;a[b+20>>0]=1;c[b+1...
function li (line 193) | function li(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...
function mi (line 193) | function mi(a,b,d){a=a|0;b=b|0;d=d|0;do if(!((b|0)==32&(d|0)==32)){if((b...
function ni (line 193) | function ni(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+488>>2]|0;a:do if...
function oi (line 193) | function oi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k...
function pi (line 193) | 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...
function qi (line 193) | function qi(b){b=b|0;var d=0;d=Or(616)|0;c[d+164>>2]=1065353216;c[d+168>...
function ri (line 193) | function ri(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0...
function si (line 193) | function si(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[d>>2]|0;d=c[b+2...
function ti (line 193) | function ti(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+232>>2]|0;a:d...
function ui (line 193) | function ui(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+328>>2]|0;a:d...
function vi (line 193) | function vi(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;i=c[d>>...
function wi (line 193) | function wi(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(HB(...
function xi (line 193) | function xi(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,h=0,i=0,k=0.0,m=0.0,n=0....
function yi (line 193) | function yi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c[a>>2]=398...
function zi (line 193) | function zi(b){b=b|0;var d=0,e=0;d=c[b+92>>2]|0;if(d|0){if(a[b+96>>0]|0)...
function Ai (line 193) | function Ai(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...
function Bi (line 193) | function Bi(){var b=0;b=Or(284)|0;c[b+164>>2]=1065353216;c[b+168>>2]=106...
function Ci (line 193) | function Ci(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...
function Di (line 193) | function Di(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0,m=0;f=l;l=l...
function Ei (line 193) | function Ei(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;switch(b|0){case 2:{if((e|0)...
function Fi (line 193) | function Fi(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0;...
function Gi (line 193) | function Gi(){var b=0;b=es()|0;c[b>>2]=1025;c[b+116>>2]=0;a[b+120>>0]=0;...
function Hi (line 193) | function Hi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l...
function Ii (line 193) | function Ii(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i...
function Ji (line 193) | function Ji(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=...
function Ki (line 193) | function Ki(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function Li (line 193) | function Li(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=c[b+212>>2]|0...
function Mi (line 193) | function Mi(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j...
function Ni (line 193) | function Ni(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=c[a+8>>2]|0;if((d|0)>...
function Oi (line 193) | function Oi(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;e=l;l=l+32|0;c[a+32>>2]=1...
function Pi (line 193) | function Pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+64|0;g=c[d>>2]|...
function Qi (line 193) | function Qi(b){b=b|0;var d=0;d=c[b+12>>2]|0;if(d|0){if(a[b+16>>0]|0){c[6...
function Ri (line 193) | function Ri(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+12>>2]|0;if(!e)re...
function Si (line 193) | function Si(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+20>>2]|0;if(!e)re...
function Ti (line 193) | function Ti(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0;e=l;l=...
function Ui (line 193) | function Ui(b){b=b|0;var d=0;d=c[b+72>>2]|0;if(d|0){if(a[b+76>>0]|0){c[6...
function Vi (line 193) | function Vi(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0.0,i=0.0,j=0.0,k=0,l=0,m=...
function Wi (line 193) | function Wi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function Xi (line 193) | function Xi(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;g=c[b+3...
function Yi (line 193) | function Yi(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=c[2395]|0;if((c[...
function Zi (line 193) | function Zi(b){b=b|0;var d=0;d=ns()|0;c[d+8>>2]=0;c[d>>2]=6416;a[d+28>>0...
function _i (line 193) | function _i(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+76>>2]|0;if(!e)re...
function $i (line 193) | function $i(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...
function aj (line 193) | function aj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function bj (line 193) | function bj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function cj (line 193) | function cj(a,c,d,e,f,h){a=a|0;c=c|0;d=+d;e=+e;f=+f;h=h|0;var i=0,j=0;d=...
function dj (line 193) | function dj(b){b=b|0;var d=0;c[b>>2]=8708;if(c[b+108>>2]|0){d=c[b+112>>2...
function ej (line 193) | function ej(b){b=b|0;var d=0,e=0,f=0,h=0.0;e=l;l=l+96|0;a[b+88>>0]=1;if(...
function fj (line 193) | function fj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,l=0.0...
function gj (line 193) | function gj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function hj (line 193) | function hj(){var b=0,d=0;d=ns()|0;c[d+8>>2]=0;c[d>>2]=6416;a[d+28>>0]=1...
function ij (line 193) | function ij(a,d,f,h){a=a|0;d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;i=c...
function jj (line 193) | function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function kj (line 193) | function kj(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0;if(!(a[b+738>>0]|...
function lj (line 193) | function lj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,j=0.0,k=0.0;h=...
function mj (line 193) | function mj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=6352;d=c[b+8>>2]|0;...
function nj (line 193) | function nj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0;f=l;l=l+16|0;c[a+...
function oj (line 193) | function oj(b,d){b=b|0;d=d|0;c[b+204>>2]=c[d+48>>2];c[b+208>>2]=c[d+52>>...
function pj (line 193) | function pj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0;f=l;l=l+16|0;c[...
function qj (line 193) | function qj(a){a=a|0;var b=0;c[a>>2]=3196;b=c[a+92>>2]|0;hb[c[c[b>>2]>>2...
function rj (line 193) | function rj(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0&(b&3|0)!=0){e=...
function sj (line 193) | function sj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if((c[d+60>>2]|0)==2){f...
function tj (line 193) | function tj(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0...
function uj (line 193) | function uj(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.0,m...
function vj (line 193) | function vj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=5756;e=c[b+8>>2]|0;...
function wj (line 193) | function wj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0.0,j=0,k=0,l...
function xj (line 193) | function xj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0,i=0.0,j=0.0;c[a+248>>...
function yj (line 193) | function yj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+96|0;g=...
function zj (line 193) | function zj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if(!((b|0)==0?1:(c[...
function Aj (line 193) | function Aj(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,h=0.0,i=0.0,k=0.0;e=c[a+...
function Bj (line 193) | function Bj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;f=l;l=l+256|0;e=c[b+...
function Cj (line 193) | function Cj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,l...
function Dj (line 193) | function Dj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0.0,k=0,l...
function Ej (line 193) | function Ej(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0;e=l;l=...
function Fj (line 193) | function Fj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+280>>2]|0;if((e|0...
function Gj (line 193) | function Gj(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=$r(...
function Hj (line 193) | function Hj(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0,f=0;if(b>=c)return +a;...
function Ij (line 193) | function Ij(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function Jj (line 193) | function Jj(a,b,d){a=a|0;b=+b;d=+d;var e=0.0,f=0.0,h=0.0;f=+g[a+692>>2];...
function Kj (line 193) | function Kj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do switch(b|0){case 2:{...
function Lj (line 193) | function Lj(){var b=0;b=Jr()|0;c[b>>2]=4884;a[b+20>>0]=1;c[b+16>>2]=0;c[...
function Mj (line 193) | function Mj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;c[6163]=(c[6163]|0)...
function Nj (line 193) | function Nj(b){b=b|0;var d=0;c[b>>2]=4e3;if(a[b+456>>0]|0?(d=c[b+452>>2]...
function Oj (line 193) | function Oj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0...
function Pj (line 193) | function Pj(a,b){a=a|0;b=+b;var d=0,e=0,f=0;e=l;l=l+16|0;Yi(12052);if((c...
function Qj (line 193) | function Qj(b,d,e,f){b=b|0;d=d|0;e=+e;f=f|0;var h=0;h=Mr()|0;c[h>>2]=5e3...
function Rj (line 193) | function Rj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function Sj (line 193) | function Sj(a,b,d){a=a|0;b=b|0;d=d|0;do if(!((b|0)==8&(d|0)==8)){if((b|0...
function Tj (line 193) | function Tj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function Uj (line 193) | function Uj(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,...
function Vj (line 193) | function Vj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;c[a+4>>2]=...
function Wj (line 193) | function Wj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m...
function Xj (line 193) | function Xj(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;if(e>>>0<3)switch(b|0){case ...
function Yj (line 193) | function Yj(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=Mr()|0;c[f>>2]=5e3;a[f+144...
function Zj (line 193) | function Zj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=$r()|0;c[h+4>>2]=...
function _j (line 193) | function _j(b){b=b|0;var d=0;c[b>>2]=4484;d=c[b+80>>2]|0;if(d|0){if(a[b+...
function $j (line 193) | function $j(b){b=b|0;var d=0;c[b>>2]=8848;d=c[b+64>>2]|0;if(d|0){if(a[b+...
function ak (line 193) | function ak(b){b=b|0;var d=0;c[b>>2]=5580;d=c[b+56>>2]|0;if(d|0){if(a[b+...
function bk (line 193) | function bk(b){b=b|0;var d=0;c[b>>2]=9476;d=c[b+60>>2]|0;if(d|0){if(a[b+...
function ck (line 193) | function ck(){var a=0,b=0,d=0,e=0;e=l;l=l+48|0;a=ur()|0;if(a|0?(d=c[a>>2...
function dk (line 193) | function dk(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0;i=l;...
function ek (line 193) | function ek(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0;i=l;...
function fk (line 193) | function fk(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=Nr()|0;te...
function gk (line 193) | function gk(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0;c=l;l...
function vd (line 194) | function vd(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function wd (line 194) | function wd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0...
function xd (line 194) | function xd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m...
function yd (line 194) | function yd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o...
function zd (line 194) | function zd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o...
function Ad (line 194) | function Ad(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0,m=0,n=0.0,o...
function Bd (line 194) | function Bd(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0,m=0...
function Cd (line 194) | function Cd(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o...
function Dd (line 194) | function Dd(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0,j=0,k=0,m=0,...
function Ed (line 194) | function Ed(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;c[b>>2]...
function Fd (line 194) | function Fd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0...
function Gd (line 194) | function Gd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0...
function Hd (line 194) | function Hd(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;j=j|0;k=k...
function Id (line 194) | function Id(a,d,f,h,i){a=a|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0...
function Jd (line 194) | function Jd(d,f,h,i){d=d|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0...
function Kd (line 194) | function Kd(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...
function Ld (line 194) | function Ld(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;a[b+20>>0]=1;c[b+16...
function Md (line 194) | function Md(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0.0,k=0,m=0,n=0.0,o...
function Nd (line 194) | function Nd(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m...
function Od (line 194) | function Od(d,e,f,h,i){d=d|0;e=e|0;f=+f;h=+h;i=+i;var j=0,k=0.0,m=0.0,n=...
function Pd (line 194) | function Pd(b,d,e){b=b|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0...
function Qd (line 194) | function Qd(b){b=b|0;var d=0.0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0...
function Rd (line 194) | function Rd(b,d,e,f,h,i,j,k,l,m,n){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j...
function Sd (line 194) | function Sd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function Td (line 194) | function Td(d,f,h,i,j,k){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0.0,m...
function Ud (line 194) | function Ud(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0...
function Vd (line 194) | function Vd(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0...
function Wd (line 194) | function Wd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,j=0.0,k=0.0,m=...
function Xd (line 194) | function Xd(d,e,f,h){d=d|0;e=e|0;f=f|0;h=h|0;var i=0,k=0,l=0,m=0.0,n=0,o...
function Yd (line 194) | function Yd(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...
function Zd (line 194) | function Zd(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l...
function _d (line 194) | function _d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0...
function $d (line 194) | function $d(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...
function ae (line 194) | function ae(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0...
function be (line 194) | function be(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...
function ce (line 194) | function ce(b){b=b|0;var d=0,e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0...
function de (line 194) | function de(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0...
function ee (line 194) | function ee(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+80|0;c[a+68>>2]...
function fe (line 194) | function fe(a,d,f,h,i,j,k,m,n){a=a|0;d=d|0;f=f|0;h=+h;i=+i;j=+j;k=k|0;m=...
function ge (line 194) | function ge(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0...
function he (line 194) | function he(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;j=j|0;...
function ie (line 194) | function ie(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0,n=0,o=0...
function je (line 194) | function je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0.0,k=0.0,...
function ke (line 194) | function ke(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;...
function le (line 194) | function le(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n...
function me (line 194) | function me(b,d,e,f,h,i,k,l){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;l...
function ne (line 194) | function ne(b,d){b=b|0;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=...
function oe (line 194) | function oe(a,b,d){a=a|0;b=b|0;d=d|0;var f=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o...
function pe (line 194) | function pe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k...
function qe (line 194) | function qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function re (line 194) | function re(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,m=0...
function se (line 194) | function se(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0.0;a=l;l...
function te (line 194) | function te(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;c[b+4>>2]=6...
function ue (line 194) | function ue(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0....
function ve (line 194) | function ve(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[e+16>>2]=...
function we (line 194) | function we(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0...
function xe (line 194) | function xe(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0.0,k=0.0,m=0.0,n=0.0,o=0...
function ye (line 194) | function ye(b,d,e,f,h,i,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j...
function ze (line 194) | function ze(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0.0...
function Ae (line 194) | function Ae(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,m...
function Be (line 194) | function Be(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|...
function Ce (line 194) | function Ce(){if(a[22720]|0)return;if(!(jy(22720)|0))return;c[6165]=0;c[...
function De (line 194) | function De(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0,j=0,k=...
function Ee (line 194) | 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,k=0,l=0...
function Fe (line 194) | function Fe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0,m=0.0...
function Ge (line 194) | function Ge(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0,k=0.0,m=0.0,...
function He (line 194) | function He(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function Ie (line 194) | function Ie(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=l;l=l+48|0;c[b+8>...
function Je (line 194) | function Je(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...
function Ke (line 194) | function Ke(a,b,f){a=a|0;b=b|0;f=f|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p...
function Le (line 194) | function Le(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,l=0,m=0...
function Me (line 194) | function Me(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function Ne (line 194) | function Ne(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l...
function Oe (line 194) | function Oe(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Pe (line 194) | function Pe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k...
function Qe (line 194) | function Qe(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,m=0...
function Re (line 194) | function Re(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0...
function Se (line 194) | function Se(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k...
function Te (line 194) | function Te(b,d){b=b|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,...
function Ue (line 194) | function Ue(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;do if((e|0)>3)if(!(...
function Ve (line 194) | function Ve(b){b=b|0;var d=0,e=0;c[b>>2]=5348;if(a[b+20>>0]|0){d=c[b+16>...
function We (line 194) | function We(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,l...
function Xe (line 194) | function Xe(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...
function Ye (line 194) | function Ye(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0...
function Ze (line 194) | function Ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[b+16>>2]=c[a+4>>2];c[...
function _e (line 194) | function _e(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0...
function $e (line 194) | function $e(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;f=c...
function af (line 194) | function af(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...
function bf (line 194) | function bf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k...
function cf (line 194) | function cf(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...
function df (line 194) | function df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0...
function ef (line 194) | function ef(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,l=0.0,m...
function ff (line 194) | function ff(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,i=0.0,j=0.0,k=0.0,m=0,n=0,o...
function gf (line 194) | function gf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0,k=0,l...
function hf (line 194) | function hf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=gs()|0;c[...
function jf (line 194) | function jf(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0,k=0,m=0.0,n...
function kf (line 194) | function kf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function lf (line 194) | function lf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0,l=0,m=0...
function mf (line 194) | function mf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=Or(460)|0...
function nf (line 194) | function nf(a,b,e){a=a|0;b=b|0;e=e|0;Sh(a,b,e)|0;c[b+52>>2]=c[a+48>>2];c...
function of (line 194) | function of(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;i=c[b+4...
function pf (line 194) | function pf(a,b,e){a=a|0;b=b|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0;Sh(a,b,e)...
function qf (line 194) | function qf(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...
function rf (line 194) | function rf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function Ac (line 195) | function Ac(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0...
function Bc (line 195) | function Bc(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;j=j|0;var k...
function Cc (line 195) | function Cc(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0...
function Dc (line 195) | function Dc(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0...
function Ec (line 195) | function Ec(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m...
function Fc (line 195) | function Fc(d,e,f,h){d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0...
function Gc (line 195) | function Gc(b,d,e,f,h,i,j,k,m,n){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j...
function Hc (line 195) | function Hc(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0...
function Ic (line 195) | function Ic(d,e){d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=...
function Jc (line 195) | function Jc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0...
function Kc (line 195) | function Kc(b,d,e,f,h,i,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j...
function Lc (line 195) | function Lc(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,...
function Mc (line 195) | function Mc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0,n=0.0,o...
function Nc (line 195) | function Nc(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,...
function Oc (line 195) | function Oc(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0...
function Pc (line 195) | function Pc(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...
function Qc (line 195) | function Qc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,k=0.0,l=0.0,m...
function Rc (line 195) | function Rc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function Sc (line 195) | function Sc(d,e){d=d|0;e=+e;var f=0,h=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=...
function Tc (line 195) | function Tc(b,d,e){b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,...
function Uc (line 195) | function Uc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Vc (line 195) | function Vc(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,m=0...
function Wc (line 195) | function Wc(a,b,f,i){a=a|0;b=b|0;f=f|0;i=i|0;var j=0.0,k=0.0,m=0.0,n=0,o...
function Xc (line 195) | function Xc(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0,m=0...
function Yc (line 195) | function Yc(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0...
function Zc (line 195) | function Zc(b,d,e,f,h,i,k,l,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k...
function _c (line 195) | function _c(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l...
function $c (line 195) | function $c(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p...
function ad (line 195) | function ad(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function bd (line 195) | function bd(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0...
function cd (line 195) | function cd(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0.0,j=...
function dd (line 195) | function dd(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0.0,m=0.0...
function ed (line 195) | function ed(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l...
function fd (line 195) | function fd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0,j=0,k=0.0,l=0,m=0...
function gd (line 195) | function gd(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l...
function hd (line 195) | function hd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[b>>2]=3308;d=c[b+192>...
function id (line 195) | function id(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0...
function jd (line 195) | function jd(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0.0,m...
function kd (line 195) | function kd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0...
function ld (line 195) | function ld(a,d,f,h,i,j,k,m,n){a=a|0;d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0...
function md (line 195) | function md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0,k=0.0,m=0...
function nd (line 195) | function nd(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...
function od (line 195) | function od(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,k=0,m=0.0,n=0...
function pd (line 195) | function pd(b,d,e,f,h,i,j,k,l,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i...
function qd (line 195) | function qd(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j...
function rd (line 195) | function rd(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0,l=0...
function sd (line 195) | function sd(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,k=0,m=0.0,n=0,o=0.0,p...
function td (line 195) | function td(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m...
function ud (line 195) | function ud(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0,j=0,...
function ec (line 196) | function ec(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function fc (line 196) | function fc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,k=0.0,m=0.0,n=...
function gc (line 196) | function gc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,k=0...
function hc (line 196) | function hc(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...
function ic (line 196) | function ic(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0.0,o=0...
function jc (line 196) | function jc(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0...
function kc (line 196) | function kc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0...
function lc (line 196) | function lc(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m...
function mc (line 196) | function mc(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,k=0.0,m=0,n=0.0,o...
function nc (line 196) | function nc(d,e,f,h,i,j){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;var k=0,m=0....
function oc (line 196) | function oc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function pc (line 196) | function pc(d,e,f){d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0.0,k=0,m=0.0,n=0.0,...
function qc (line 196) | function qc(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p...
function rc (line 196) | function rc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function sc (line 196) | function sc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k...
function tc (line 196) | function tc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n...
function uc (line 196) | function uc(b,d){b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0,k=0.0,m=0.0,n=0,o=...
function vc (line 196) | function vc(b,e,f,h,i,j,k){b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var...
function wc (line 196) | function wc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,k=0,m=0...
function xc (line 196) | function xc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0...
function yc (line 196) | function yc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0...
function zc (line 196) | function zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0...
function Wb (line 197) | function Wb(d,f){d=d|0;f=f|0;var h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0...
function Xb (line 197) | function Xb(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0...
function Yb (line 197) | function Yb(b){b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0,k=0.0,m=0,n=0,o=0,p=0,q...
function Zb (line 197) | function Zb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0...
function _b (line 197) | function _b(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0...
function $b (line 197) | function $b(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0...
function ac (line 197) | function ac(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,k=0,m=0,n=0,o=0,p=0...
function bc (line 197) | function bc(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0...
function cc (line 197) | function cc(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...
function dc (line 197) | function dc(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,k=0.0,m=0.0,n=0,o=0.0,...
function hk (line 198) | function hk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=c[e+16>>2]|0;if(!...
function ik (line 198) | function ik(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function jk (line 198) | function jk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+48|0;e=aF(b,0)|...
function kk (line 198) | function kk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b+188>>2]|0;if(...
function lk (line 198) | function lk(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0,h=0.0,i=0.0,j...
function mk (line 198) | function mk(b,d){b=b|0;d=d|0;var e=0,f=0,h=0;g[b+16>>2]=0.0;g[b+20>>2]=0...
function nk (line 198) | function nk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;c[6135]=(c[6135]|0)+-1;...
function ok (line 198) | function ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=c[b+8...
function pk (line 198) | function pk(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0;while(1){g=...
function qk (line 198) | function qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=Nr()|0;Gd(f,b,d,e);c[f>>2...
function rk (line 198) | function rk(a,b){a=a|0;b=+b;var d=0,e=0;d=l;l=l+16|0;Te(a,b);Yi(11809);a...
function sk (line 198) | function sk(b,d){b=b|0;d=d|0;a[b+148>>0]=0;if((((Md(b,d)|0?(a[b+148>>0]=...
function tk (line 198) | function tk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function uk (line 198) | function uk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+224|0;e=g+80|0;f=e+...
function vk (line 198) | function vk(b,d){b=b|0;d=d|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}...
function wk (line 198) | function wk(b){b=b|0;var d=0,e=0,f=0;c[b>>2]=6288;d=c[b+12>>2]|0;if((d|0...
function xk (line 198) | function xk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j...
function yk (line 198) | function yk(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;g=c[a+7...
function zk (line 198) | function zk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0;i=c...
function Ak (line 198) | function Ak(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=l;l=l+32|0;d=c[...
function Bk (line 198) | function Bk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function Ck (line 198) | function Ck(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=c[b>>2];c[d+4>...
function Dk (line 198) | function Dk(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;Yi(15077);d=c[a+68>>2]|0;j...
function Ek (line 198) | function Ek(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;do switch(b|0){case...
function Fk (line 198) | function Fk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0...
function Gk (line 198) | function Gk(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0;if(a[b+527>>0]|0)...
function Hk (line 198) | function Hk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+e|0;d=d&255;if((e|0...
function Ik (line 198) | function Ik(a,b,c,d,e,f,h,i,j,k){a=+a;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;i=+i...
function Jk (line 198) | function Jk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,h=0,i=0;b=c[b+36>>2]|0;...
function Kk (line 198) | function Kk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do if(c>>>0>=3)if((c+-3...
function Lk (line 198) | function Lk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;R...
function Mk (line 198) | function Mk(b,d,e){b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;a[...
function Nk (line 198) | function Nk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;do if(!(HB(b,c[d+8>...
function Ok (line 198) | function Ok(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(HB(b,...
function Pk (line 198) | function Pk(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=h|0;g[b>>2]=d;c[b+4>>2]=...
function Qk (line 198) | function Qk(b,d,e){b=b|0;d=d|0;e=e|0;b=Br(152)|0;c[b>>2]=4944;a[b+20>>0]...
function Rk (line 198) | function Rk(b){b=b|0;var d=0,e=0,f=0;e=Br(5260)|0;c[e>>2]=5256;c[e+4>>2]...
function Sk (line 198) | function Sk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Gb[c[(c[d>>2]|0)+40>>...
function Tk (line 198) | function Tk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Gb[c[(c[d>>2]|0)+40>>...
function Uk (line 198) | function Uk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Gb[c[(c[d>>2]|0)+40>>...
function Vk (line 198) | function Vk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=l;l=l+32|0;if(!(+g[a+344>...
function Wk (line 198) | function Wk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;a[b+53>>0]=1;do if((c[b+4>>...
function Xk (line 198) | function Xk(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0,k=0;e=...
function Yk (line 198) | function Yk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+64|0;if(!(H...
function Zk (line 198) | function Zk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function _k (line 198) | function _k(b,d){b=b|0;d=d|0;var e=0;e=Wr()|0;c[e+8>>2]=0;c[e+12>>2]=106...
function $k (line 198) | function $k(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j...
function al (line 198) | function al(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...
function bl (line 198) | function bl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function cl (line 198) | function cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+32|0;d=c[a+216>>2]|...
function dl (line 198) | function dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Gb[c[(c[d>>2]|0)+40>>...
function el (line 198) | function el(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Gb[c[(c[d>>2]|0)+40>>...
function fl (line 198) | function fl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;a[b+171>>...
function gl (line 198) | function gl(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0,j=0;j=c[a+68>...
function hl (line 198) | function hl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0...
function il (line 198) | function il(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0...
function jl (line 198) | function jl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+48|0;c[f+32...
function kl (line 198) | function kl(b){b=b|0;var d=0;d=c[b>>2]|0;if(d|0)Sm(b,d);d=c[b+4>>2]|0;if...
function ll (line 198) | function ll(b,d){b=b|0;d=+d;var e=0,f=0.0,h=0;d=1.0/+g[(c[b+116>>2]|0)+3...
function ml (line 198) | function ml(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0.0,h=0.0,i=0.0;e=l;...
function nl (line 198) | function nl(a,d,f,g,h,i){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0;j=c...
function ol (line 198) | function ol(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0;e=+g[a+28...
function pl (line 198) | function pl(b){b=b|0;var d=0;c[b>>2]=5212;d=c[b+284>>2]|0;hb[c[c[d>>2]>>...
function ql (line 198) | function ql(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function rl (line 198) | function rl(a){a=a|0;var b=0,d=0,e=0,f=0.0,h=0.0;e=c[a+232>>2]|0;if((e|0...
function sl (line 198) | function sl(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0...
function tl (line 198) | function tl(b){b=b|0;var d=0;d=Wr()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;...
function ul (line 198) | function ul(a,b){a=a|0;b=+b;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0;h=+zb[c[(c...
function vl (line 198) | function vl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[a+8>>2]|0)<=0...
function wl (line 198) | function wl(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;g=(a[b+16>>...
function xl (line 198) | function xl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0...
function yl (line 198) | function yl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[d>>2]|0;g=G...
function zl (line 198) | function zl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function Al (line 198) | function Al(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=c[a+720>>2]|0...
function Bl (line 198) | function Bl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function Cl (line 198) | function Cl(a){a=a|0;var b=0,d=0,e=0.0,f=0.0;if((c[a+136>>2]|0)<=0)retur...
function Dl (line 198) | function Dl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;f=c[d>>2]|0...
function El (line 198) | function El(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+48|0;c[f>>2...
function Fl (line 198) | function Fl(a,b,d){a=a|0;b=+b;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;i=...
function Gl (line 198) | function Gl(a,b){a=a|0;b=+b;var d=0,e=0.0,f=0.0,h=0.0,i=0.0;d=is()|0;c[d...
function Hl (line 198) | function Hl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=l;l=l+32|0;zp(a,+g[b>>2],...
function Il (line 198) | function Il(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+64|0;c[d>>2]=1065353216;c[d...
function Jl (line 198) | function Jl(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=+e;var f=0,h=0;f=l;l=l+16...
function Kl (line 198) | function Kl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((d|0)==0?1:(c[d+236>>2]&...
function Ll (line 198) | function Ll(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;j...
function Ml (line 198) | function Ml(b,d){b=b|0;d=d|0;if((c[b+16>>2]|0)!=(0-(c[b+76>>2]|0)|0))ret...
function Nl (line 198) | function Nl(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0;f=...
function Ol (line 198) | function Ol(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;i...
function Pl (line 198) | function Pl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0;i...
function Ql (line 198) | function Ql(b){b=b|0;var d=0,e=0;c[b>>2]=6416;d=c[b+64>>2]|0;if(d|0?(Oh(...
function Rl (line 198) | function Rl(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h...
function Sl (line 198) | function Sl(b){b=b|0;var d=0,e=0;c[b>>2]=7380;d=c[b+104>>2]|0;if(d|0){if...
function Tl (line 198) | function Tl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;switch(b|0){case 0:{b=0;a=0...
function Ul (line 198) | function Ul(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;c[b+4>>2]=c[d>>2];c[b+4+4>>2...
function Vl (line 198) | function Vl(a,e,f){a=a|0;e=e|0;f=f|0;var h=0.0;switch(c[a+96>>2]|0){case...
function Wl (line 198) | function Wl(a,b){a=a|0;b=b|0;var c=0.0,d=0;d=l;l=l+32|0;c=+g[b+12>>2];if...
function Xl (line 198) | function Xl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;d=l;l=l+16|...
function Yl (line 198) | function Yl(b){b=b|0;var d=0;c[b>>2]=7380;d=c[b+104>>2]|0;if(d|0){if(a[b...
function Zl (line 198) | function Zl(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+...
function _l (line 198) | function _l(a,b){a=+a;b=+b;var d=0;d=zs()|0;c[d+8>>2]=0;c[d+12>>2]=10653...
function $l (line 198) | function $l(a,b){a=+a;b=+b;var d=0;d=zs()|0;c[d+8>>2]=0;c[d+12>>2]=10653...
function am (line 198) | function am(a,b){a=+a;b=+b;var d=0;d=zs()|0;c[d+8>>2]=0;c[d+12>>2]=10653...
function bm (line 198) | function bm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0;e=l;l=l+16|0;c[e>...
function cm (line 198) | function cm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=bH(c[a+4>>2]|...
function dm (line 198) | function dm(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[a+348>>2]=c[b>>2];c[...
function em (line 198) | function em(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+268>>...
function fm (line 198) | function fm(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0.0,h=0.0,i=0.0;e=l;...
function gm (line 198) | function gm(a){a=a|0;var b=0;b=l;l=l+32|0;g[a>>2]=1.2000000476837158;g[a...
function hm (line 198) | function hm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=Gb[c[(c[b>>2]...
function im (line 198) | function im(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[20073+f>>0]|...
function jm (line 198) | function jm(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;c[a>>2]=b;c[...
function km (line 198) | function km(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+280>>2]|0;if(...
function lm (line 198) | function lm(){var b=0;b=l;l=l+48|0;if(a[22608]|0){l=b;return}if(!(jy(226...
function mm (line 198) | function mm(){var b=0,e=0,f=0;f=l;l=l+16|0;a[f>>0]=10;b=c[2401]|0;if(!b)...
function nm (line 198) | function nm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0;e=l;l=l+16|0;c[e>...
function om (line 198) | function om(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0.0;d=l;l=l+16|0;e=+dz(+g[...
function pm (line 198) | function pm(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>...
function qm (line 198) | function qm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do switch(b|0){case 2:c...
function rm (line 198) | function rm(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4...
function sm (line 198) | function sm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+56>>2]|0;if(!d)return;e=l...
function tm (line 198) | function tm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+52>>2]|0;if(!d)return;e=l...
function um (line 198) | function um(a,b,c,d,e,f,h,i,j,k,m,n,o){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=...
function vm (line 198) | function vm(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0,f=0.0,h=0.0;e=+g[a+2...
function wm (line 198) | function wm(a,b,d){a=a|0;b=b|0;d=d|0;gv(a);c[a>>2]=3076;c[a+12>>2]=c[b>>...
function xm (line 198) | function xm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;if(!(+g[b+36>>2]>f))return;a...
function ym (line 198) | function ym(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j...
function zm (line 198) | function zm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j...
function Am (line 198) | function Am(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j...
function Bm (line 198) | function Bm(a,b){a=a|0;b=+b;var c=0,d=0.0;c=l;l=l+16|0;if(!(+g[a+68>>2]>...
function Cm (line 198) | function Cm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,g=0;if((d|0)>...
function Dm (line 198) | function Dm(a){a=a|0;var b=0.0,d=0.0,e=0.0;d=+g[(c[a+28>>2]|0)+344>>2];e...
function Em (line 198) | function Em(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;if(b[a+56>>1]|0)return;b[a+...
function Fm (line 198) | function Fm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+16>>2]|0;do if(f){if(...
function Gm (line 198) | function Gm(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;f=c[a+80>>2]|0;if((...
function Hm (line 198) | function Hm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a+8>>2]|0;a=c[f+8>>2]|0...
function Im (line 198) | function Im(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;switch(e|0){case 5:case -1:b...
function Jm (line 198) | function Jm(a,b,d){a=a|0;b=b|0;d=d|0;Js(a);c[a>>2]=2904;c[a+20>>2]=c[b>>...
function Km (line 198) | function Km(){var b=0,d=0,e=0;do if((c[2416]|0)>=0?(fH()|0)!=0:0){if((a[...
function Lm (line 198) | function Lm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[d>>2]|0;a=Tw(c[...
function Mm (line 198) | function Mm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+48|0;f=c[b+192>...
function Nm (line 198) | function Nm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=l;l=l+256...
function Om (line 198) | function Om(a,b,d){a=a|0;b=b|0;d=d|0;a:do switch(c[b+216>>2]|0){case 2:c...
function Pm (line 198) | function Pm(a,b,d){a=a|0;b=b|0;d=d|0;Sh(a,b,d)|0;c[b+52>>2]=c[a+300>>2];...
function Qm (line 198) | function Qm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+112|0;d=bH(c[b+...
function Rm (line 198) | function Rm(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=bH(b)...
function Sm (line 198) | function Sm(a,b){a=a|0;b=b|0;var d=0;if(c[b+40>>2]|0){Sm(a,c[b+36>>2]|0)...
function Tm (line 198) | function Tm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+32>>2...
function Um (line 198) | function Um(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(HB(a,c[b...
function Vm (line 198) | function Vm(a){a=a|0;var b=0;b=l;l=l+48|0;g[b+32>>2]=1.0;g[b+28>>2]=0.0;...
function Wm (line 198) | function Wm(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+68>>2]=(c[a+68>>2]|0)+1;d=c...
function Xm (line 198) | function Xm(a,b){a=+a;b=+b;var d=0;d=Ds()|0;c[d+8>>2]=0;c[d+12>>2]=10653...
function Ym (line 198) | function Ym(a,b){a=+a;b=+b;var d=0;d=Ds()|0;c[d+8>>2]=0;c[d+12>>2]=10653...
function Zm (line 198) | function Zm(a,b){a=+a;b=+b;var d=0;d=Ds()|0;c[d+8>>2]=0;c[d+12>>2]=10653...
function _m (line 198) | function _m(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do switch(c|0){case 5:c...
function $m (line 198) | function $m(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;switch(b|0){case 2:case 1:if...
function an (line 198) | function an(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;c[f>>2...
function bn (line 198) | function bn(a,b){a=a|0;b=b|0;var d=0;a=c[a+64>>2]|0;if(!b)return;d=c[a+1...
function cn (line 198) | function cn(a){a=a|0;var b=0,d=0;if((c[a+232>>2]|0)<=0)return;b=0;do{d=(...
function dn (line 198) | function dn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+12>>2]|0;if((d|0)<=0)...
function en (line 198) | function en(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=bH(c[a+4>>2]|0)|0;if((e|0...
function fn (line 198) | function fn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+32>>2]|0;c[f>...
function gn (line 198) | function gn(a,b,d){a=a|0;b=b|0;d=d|0;c[a+52>>2]=c[b>>2];c[a+52+4>>2]=c[b...
function hn (line 198) | function hn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[d>>2]|0;a=Tw(c[b>>2]|0)...
function jn (line 198) | function jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;e=b;f=d+104|0;do{c[d>>2...
function kn (line 198) | function kn(a,b,c){a=+a;b=b|0;c=c|0;var d=0,e=0;e=l;l=l+32|0;d=Br(140)|0...
function ln (line 198) | function ln(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=c[b+16>>2];c[d+4>>2...
function mn (line 198) | function mn(b,d){b=b|0;d=d|0;var e=0;if((bH(c[b+8>>2]|0)|0)>=(d|0))retur...
function nn (line 198) | function nn(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...
function on (line 198) | function on(a,b){a=a|0;b=b|0;var d=0;a=c[a+64>>2]|0;d=c[a+8>>2]|0;if(d|0...
function pn (line 198) | function pn(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g[a+692>>2]=(c-b...
function qn (line 198) | function qn(a,b,d){a=a|0;b=+b;d=+d;var e=0;e=l;l=l+16|0;g[e+12>>2]=b;g[e...
function rn (line 198) | function rn(){var b=0;b=l;l=l+32|0;if(a[22600]|0){l=b;return}if(!(jy(226...
function sn (line 198) | function sn(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+16>>2]|0;e=lb[c...
function tn (line 198) | function tn(b,d){b=b|0;d=d|0;var e=0;if((bH(c[b+8>>2]|0)|0)>=(d|0))retur...
function un (line 198) | function un(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Jl(e,bH(a...
function vn (line 198) | function vn(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=c[a+52>>2];c[b+4>>2]=c[a+52...
function wn (line 198) | function wn(a){a=a|0;var b=0,d=0,e=0;b=c[a+24>>2]|0;if((b|0)<=0)return;e...
function xn (line 198) | function xn(a,b){a=a|0;b=b|0;var d=0,e=0;e=lb[c[(c[a>>2]|0)+16>>2]&127](...
function yn (line 198) | function yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(HB(a,c[b+8>>2]|0)|0)Fm(b...
function zn (line 198) | function zn(a,b,c){a=a|0;b=b|0;c=+c;var d=0;d=l;l=l+16|0;g[d+12>>2]=+g[(...
function An (line 198) | function An(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=c[a+8>>2];c[b+4>>2]=c[a+8+4...
function Bn (line 198) | function Bn(a,b){a=a|0;b=b|0;var d=0,e=0;e=lb[c[(c[a>>2]|0)+52>>2]&127](...
function Cn (line 198) | function Cn(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Jl(e,bH(a...
function Dn (line 198) | function Dn(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+80|0;Rm(c+32|0,b);Gq(c,+g[b...
function En (line 198) | function En(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+4...
function Fn (line 198) | function Fn(b){b=b|0;var d=0;c[b>>2]=5168;d=c[b+276>>2]|0;if(d|0){if(a[b...
function Gn (line 198) | function Gn(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;qp(e,b,c,...
function Hn (line 198) | function Hn(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Jl(e,a+26...
function In (line 198) | function In(a,b,d){a=a|0;b=b|0;d=d|0;c[a+164>>2]=c[b>>2];c[a+164+4>>2]=c...
function Jn (line 198) | function Jn(b){b=b|0;var d=0;c[b>>2]=4236;d=c[b+496>>2]|0;if(d|0){if(a[b...
function Kn (line 198) | function Kn(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=c[a+892>>2];c[b+4>>2]=c[a+8...
function Ln (line 198) | function Ln(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;f=c[d>>2]|0;f=Gb[c[(c[f>>2]...
function Mn (line 198) | function Mn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do if((c|0)==-1)switch(...
function Nn (line 198) | function Nn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+g[b+28>>2]...
function On (line 198) | function On(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a+4>>2]|0;i...
function Pn (line 198) | function Pn(b){b=b|0;var d=0;c[b>>2]=5e3;d=c[b+140>>2]|0;if(d|0){if(a[b+...
function Qn (line 198) | function Qn(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22584]|0))jy(22584)|0;G...
function Rn (line 198) | function Rn(a,b){a=a|0;b=b|0;var d=0;d=c[a+4>>2]|0;if((c[b>>2]|0)!=(d|0)...
function Sn (line 198) | function Sn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=0;while(1){if...
function Tn (line 198) | function Tn(b){b=b|0;var d=0;c[b>>2]=9520;d=c[b+32>>2]|0;if(d|0){if(a[b+...
function Un (line 198) | function Un(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Gb[c[(c[d>>2]|0)+40>>...
function Vn (line 198) | function Vn(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+16|0;g[c+12>>2]=-+g[(bH(b)|...
function Wn (line 198) | function Wn(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;e=l;l=l+16|0;d=+LD(a);d...
function Xn (line 198) | function Xn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0;h=c[a+104>>2]|0...
function Yn (line 198) | function Yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+32|0;c[e>>2]=c[a+60...
function Zn (line 198) | function Zn(a,b){a=a|0;b=b|0;var c=0.0;c=+g[(bH(b)|0)>>2];g[a>>2]=+g[a>>...
function _n (line 198) | function _n(a,b){a=a|0;b=b|0;var c=0.0;c=+g[(bH(b)|0)>>2];g[a>>2]=+g[a>>...
function $n (line 198) | function $n(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22576]|0))jy(22576)|0;j...
function ao (line 198) | function ao(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22624]|0))jy(22624)|0;j...
function bo (line 198) | function bo(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|...
function co (line 198) | function co(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=bH(c[b+4>>2]|0)|...
function eo (line 198) | function eo(b){b=b|0;var d=0;d=a[b+74>>0]|0;a[b+74>>0]=d+255|d;d=c[b>>2]...
function fo (line 198) | function fo(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;if((e|0)!=-1)return;switch(b...
function go (line 198) | function go(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[(HG(a)|0)>>2];c=c*+g[(...
function ho (line 198) | function ho(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[(IG(a)|0)>>2];c=c*+g[(...
function io (line 198) | function io(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((b|0)==(d|0))return;e=c[...
function jo (line 198) | function jo(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=l;l=l+16|0;if(!(a[22592]|0...
function ko (line 198) | function ko(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=l;l=l+16|0;if(!(a[22632]|0...
function lo (line 198) | function lo(a){a=a|0;var b=0,d=0.0,e=0.0,f=0.0;b=l;l=l+32|0;Rb[c[(c[a>>2...
function mo (line 198) | function mo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((e|0)>0)a=0;else return;...
function no (line 198) | function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;a=Gb[c[(c[a>>2]...
function oo (line 198) | function oo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;c[f>>2...
function po (line 198) | function po(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<...
function qo (line 198) | function qo(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+8>>2]|0;if(!((d|0)!=0&(a|0)!=...
function ro (line 198) | function ro(b){b=b|0;var d=0;c[b>>2]=5168;d=c[b+276>>2]|0;if(d|0){if(a[b...
function so (line 198) | function so(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;a=Gb[c[(c[a>>2]...
function to (line 198) | function to(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;c[e>>2]=8924;c...
function uo (line 198) | function uo(b){b=b|0;var d=0;c[b>>2]=6896;if(a[b+61>>0]|0?(d=c[b+52>>2]|...
function vo (line 198) | function vo(b){b=b|0;var d=0;c[b>>2]=4236;d=c[b+496>>2]|0;if(d|0){if(a[b...
function wo (line 198) | function wo(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0,f=0;f=l;l=l+16|0;g[f+12...
function xo (line 198) | function xo(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0,f=0;f=l;l=l+16|0;g[f+12...
function yo (line 198) | function yo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(HB(a,c[b...
function zo (line 198) | function zo(a){a=a|0;var b=0.0,d=0,e=0,f=0.0;e=c[a+712>>2]|0;if((e|0)<=0...
function Ao (line 198) | function Ao(a){a=a|0;var b=0;c[a>>2]=5632;c[a+12>>2]=5680;b=c[a+60>>2]|0...
function Bo (line 198) | function Bo(b){b=b|0;var d=0;c[b>>2]=5e3;d=c[b+140>>2]|0;if(d|0){if(a[b+...
function Co (line 198) | function Co(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22568]|0))jy(22568)|0;V...
function Do (line 198) | function Do(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22560]|0))jy(22560)|0;G...
function Eo (line 198) | function Eo(a,b,d){a=a|0;b=+b;d=d|0;b=b*.4000000059604645*+zb[c[(c[a>>2]...
function Fo (line 198) | function Fo(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i...
function Go (line 198) | function Go(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;b=bH(b+4|0)|0;e=(bH(aF(...
function Ho (line 198) | function Ho(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=-581039253;c[d+4>>2...
function Io (line 198) | function Io(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[(bH(a)|0)>>2];c=c*+g[(...
function Jo (line 198) | function Jo(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22544]|0))jy(22544)|0;s...
function Ko (line 198) | function Ko(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22552]|0))jy(22552)|0;W...
function Lo (line 198) | function Lo(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[a>>2];c=c*+g[(bH(b)|0)...
function Mo (line 198) | function Mo(b){b=b|0;var d=0;c[b>>2]=8964;if(a[b+192>>0]|0?(d=c[b+136>>2...
function No (line 198) | function No(b){b=b|0;var d=0;c[b>>2]=9520;d=c[b+32>>2]|0;if(d|0){if(a[b+...
function Oo (line 198) | function Oo(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function Po (line 198) | function Po(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=l;l=l+64|0;jk(d+16|0,b,c)...
function Qo (line 198) | function Qo(a){a=a|0;var b=0;c[a>>2]=5632;c[a+12>>2]=5680;b=c[a+60>>2]|0...
function Ro (line 198) | function Ro(b){b=b|0;var d=0;c[b>>2]=3124;d=c[b+32>>2]|0;if(d|0){if(a[b+...
function So (line 198) | function So(a){a=a|0;var b=0,d=0;c[a>>2]=7248;b=c[a+52>>2]|0;if(b|0?(hb[...
function To (line 198) | function To(a,b){a=a|0;b=b|0;var d=0;d=(c[a+92>>2]|0)+4|0;c[d>>2]=c[b>>2...
function Uo (line 198) | function Uo(b,d){b=b|0;d=d|0;var e=0;if(a[b+273>>0]|0?(e=c[b+200>>2]|0,e...
function Vo (line 198) | function Vo(b){b=b|0;var d=0;c[b>>2]=5256;d=c[b+20>>2]|0;if(d|0){if(a[b+...
function Wo (line 198) | function Wo(a,b){a=a|0;b=+b;c[a+8>>2]=0;c[a+12>>2]=1065353216;c[a+16>>2]...
function Xo (line 198) | function Xo(b){b=b|0;var d=0;c[b>>2]=8772;d=c[b+16>>2]|0;if(d|0){if(a[b+...
function Yo (line 198) | function Yo(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0;f=l;l=l+16|0;g[...
function Zo (line 198) | function Zo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;a=c[b+8>>2]|0;b=c[a...
function _o (line 198) | function _o(b){b=b|0;var d=0,e=0;c[b>>2]=6128;if(!(a[b+8>>0]|0)){YG(b);r...
function $o (line 198) | function $o(b){b=b|0;var d=0,e=0;c[b>>2]=9408;if(!(a[b+8>>0]|0)){YG(b);r...
function ap (line 198) | function ap(b){b=b|0;var d=0,e=0;c[b>>2]=5604;if(!(a[b+8>>0]|0)){YG(b);r...
function bp (line 198) | function bp(b){b=b|0;var d=0;c[b>>2]=6896;if(!(a[b+61>>0]|0))return;d=c[...
function cp (line 198) | function cp(b){b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;e=(a[d>>0]|0)+-48|0;if(...
function dp (line 198) | function dp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;c[e>>2]=8944;c...
function ep (line 198) | function ep(b){b=b|0;var d=0,e=0;c[b>>2]=5700;if(!(a[b+8>>0]|0)){YG(b);r...
function fp (line 198) | function fp(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...
function gp (line 198) | function gp(){var a=0,b=0;b=l;l=l+32|0;a=Br(112)|0;Ms(b);bg(a,b);l=b;ret...
function hp (line 198) | function hp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=O(b&65535,a&65535)|0;e=(c...
function ip (line 198) | function ip(b){b=b|0;var d=0,e=0;c[b>>2]=6176;if(!(a[b+16>>0]|0)){YG(b);...
function jp (line 198) | function jp(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;e=+B(+(+g[b>>2]));d=+...
function kp (line 198) | function kp(a,b){a=a|0;b=b|0;Ef(a,c[b+36>>2]|0);return}
function lp (line 198) | function lp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(HB(a,c[b+8>>2]|0)|0)Fm(b...
function mp (line 198) | function mp(a){a=a|0;var b=0;c[a>>2]=5680;b=c[a+48>>2]|0;jb[c[(c[b>>2]|0...
function np (line 198) | function np(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+...
function op (line 198) | function op(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;g[a>>2]=(1.0-d)*+g[b>>2]+ +g...
function pp (line 198) | function pp(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i...
function qp (line 198) | function qp(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i...
function rp (line 198) | function rp(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i...
function sp (line 198) | function sp(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+16|0;g[c+8>>2]=-+g[b>>2];g[...
function tp (line 198) | function tp(a){a=a|0;var b=0;c[a>>2]=7248;b=c[a+52>>2]|0;if(!b)return;hb...
function up (line 198) | function up(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h...
function vp (line 198) | function vp(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{...
function wp (line 198) | function wp(a){a=a|0;var b=0;c[a>>2]=5680;b=c[a+48>>2]|0;jb[c[(c[b>>2]|0...
function xp (line 198) | function xp(){var b=0;b=Br(40)|0;g[b+12>>2]=1.0;c[b+8>>2]=0;c[b+4>>2]=5;...
function yp (line 198) | function yp(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c...
function zp (line 198) | function zp(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;qp(e,b,c,...
function Ap (line 198) | function Ap(a,b,c){a=+a;b=+b;c=+c;var d=0,e=0;e=l;l=l+16|0;g[e+8>>2]=a;g...
function Bp (line 198) | function Bp(a,b){a=a|0;b=b|0;c[a+12>>2]=c[b>>2];c[a+12+4>>2]=c[b+4>>2];c...
function Cp (line 198) | function Cp(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g...
function Dp (line 198) | function Dp(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return Gb[c[(c[a>>2]|0)+8>>2...
function Ep (line 198) | function Ep(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;qp(e,b,c,...
function Fp (line 198) | function Fp(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g...
function Gp (line 198) | function Gp(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;var...
function Hp (line 198) | function Hp(){var a=0,b=0;b=ur()|0;if((b|0?(a=c[b>>2]|0,a|0):0)?((c[a+48...
function Ip (line 198) | function Ip(a,b,d){a=a|0;b=b|0;d=d|0;By(a,b);c[a+48>>2]=c[d>>2];c[a+48+4...
function Jp (line 198) | function Jp(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+328>>2]=c...
function Kp (line 198) | function Kp(){var a=0,b=0;b=l;l=l+32|0;a=Br(92)|0;Ms(b);Ed(a,b);l=b;retu...
function Lp (line 198) | function Lp(a,b,d){a=a|0;b=b|0;d=d|0;c[d>>2]=c[a+56+(b<<4)>>2];c[d+4>>2]...
function Mp (line 198) | function Mp(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+312>>2]=c...
function Np (line 198) | function Np(b,d){b=b|0;d=d|0;if(!(a[22616]|0))jy(22616)|0;b=aF(b,d)|0;c[...
function Op (line 198) | function Op(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+544>>2]=c...
function Pp (line 198) | function Pp(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;...
function Qp (line 198) | function Qp(a){a=a|0;var b=0.0,d=0.0;d=+g[a+32>>2];+zb[c[(c[a>>2]|0)+48>...
function Rp (line 198) | function Rp(a){a=a|0;var b=0.0,d=0.0;d=+g[a+28>>2];b=+zb[c[(c[a>>2]|0)+4...
function Sp (line 198) | function Sp(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g...
function Tp (line 198) | function Tp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;c[e>>2]=c[d>>2...
function Up (line 198) | function Up(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0;f=l;l=l+16|0;g[...
function Vp (line 198) | function Vp(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]*+g[b>>2];g[a+4>>2]=+g[a+4>...
function Wp (line 198) | function Wp(){var a=0;a=Br(8)|0;c[6431]=a;Va(a|0,0)|0;c[6421]=19534;c[64...
function Xp (line 198) | function Xp(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function Yp (line 198) | function Yp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=Or(324)|0;Ld(d,a,b,c);ret...
function Zp (line 198) | function Zp(b){b=b|0;var d=0;c[b>>2]=3124;d=c[b+32>>2]|0;if(!d){YG(b);re...
function _p (line 198) | function _p(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+204>>2]|0;if(a&4|0)return 0;b...
function $p (line 198) | function $p(a,b,d){a=a|0;b=b|0;d=d|0;pm(a,b);c[a+48>>2]=c[d>>2];c[a+48+4...
function aq (line 198) | function aq(b){b=b|0;var d=0;c[b>>2]=6128;if(!(a[b+8>>0]|0))return;d=c[b...
function bq (line 198) | function bq(b){b=b|0;var d=0;c[b>>2]=5256;d=c[b+20>>2]|0;if(!d){YG(b);re...
function cq (line 198) | function cq(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+128|0;Dn(c,a+68|0);Po(c+64|...
function dq (line 198) | function dq(b){b=b|0;var d=0;c[b>>2]=9408;if(!(a[b+8>>0]|0))return;d=c[b...
function eq (line 198) | function eq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=k...
function fq (line 198) | function fq(b){b=b|0;var d=0;c[b>>2]=5604;if(!(a[b+8>>0]|0))return;d=c[b...
function gq (line 198) | function gq(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;return ((c[b>>2]|0)==(a|0)?1:...
function hq (line 198) | function hq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=Yr()|0;te...
function iq (line 198) | function iq(a,b){a=a|0;b=b|0;a=c[a+20>>2]|0;return Gb[c[(c[a>>2]|0)+8>>2...
function jq (line 198) | function jq(b){b=b|0;var d=0;c[b>>2]=8772;d=c[b+16>>2]|0;if(!d){YG(b);re...
function kq (line 198) | function kq(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;g[e+8>>2]...
function lq (line 198) | function lq(b){b=b|0;var d=0;c[b>>2]=5700;if(!(a[b+8>>0]|0))return;d=c[b...
function mq (line 198) | function mq(a,b,d){a=a|0;b=b|0;d=d|0;SF(a);c[a>>2]=3008;zq(a+4|0,b);zq(a...
function nq (line 198) | function nq(b){b=b|0;var d=0;c[b>>2]=6176;if(!(a[b+16>>0]|0))return;d=c[...
function oq (line 198) | function oq(a){a=a|0;var b=0;b=l;l=l+16|0;Vm(a);g[b+8>>2]=0.0;g[b+4>>2]=...
function pq (line 198) | function pq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function qq (line 198) | function qq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0;f=Br(44)|0;j...
function rq (line 198) | function rq(a,b,c){a=a|0;b=b|0;c=+c;switch(b|0){case 3:{b=a+452|0;break}...
function sq (line 198) | function sq(a,b){a=a|0;b=b|0;b=c[b+36>>2]|0;Ae(a,c[(c[(c[(c[a+4>>2]|0)+4...
function tq (line 198) | function tq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function uq (line 198) | function uq(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)==3)break;g[a+...
function vq (line 198) | function vq(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;var e=0;e=Br(140)|0;Pk(e,a,b...
function wq (line 198) | function wq(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...
function xq (line 198) | function xq(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0...
function yq (line 198) | function yq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(b|0...
function zq (line 198) | function zq(a,b){a=a|0;b=b|0;pm(a,b);c[a+48>>2]=c[b+48>>2];c[a+48+4>>2]=...
function Aq (line 198) | function Aq(a,b){a=a|0;b=b|0;Ur(a,b,b+16|0,b+32|0);Ur(a+16|0,b+4|0,b+20|...
function Bq (line 198) | function Bq(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)==3)break;g[a+...
function Cq (line 198) | function Cq(a){a=a|0;c[6432]=(c[6432]|0)+1;a=ec((a<<2|3)+16|0)|0;if(!a){...
function Dq (line 198) | function Dq(a,b){a=a|0;b=b|0;hb[c[(c[b>>2]|0)+32>>2]&511](b);ad(a,b);hb[...
function Eq (line 198) | function Eq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function Fq (line 198) | function Fq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Rb[c[(c[a>>2]|0)+108>>2]&12...
function Gq (line 198) | function Gq(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;g[e+8>>2]...
function Hq (line 198) | function Hq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=as()|0;Td...
function Iq (line 198) | function Iq(a){a=a|0;c[6432]=(c[6432]|0)+1;a=ec((a*104|3)+16|0)|0;if(!a)...
function Jq (line 198) | function Jq(a,b){a=a|0;b=b|0;c[a+12>>2]=c[b>>2];c[a+12+4>>2]=c[b+4>>2];c...
function Kq (line 198) | function Kq(a,b){a=a|0;b=b|0;c[a+44>>2]=c[b>>2];c[a+44+4>>2]=c[b+4>>2];c...
function Lq (line 198) | function Lq(a,c){a=a|0;c=c|0;if(!((b[c+4>>1]&b[a+6>>1])<<16>>16)){a=0;re...
function Mq (line 198) | function Mq(a,c){a=a|0;c=c|0;if(!((b[c+4>>1]&b[a+10>>1])<<16>>16)){a=0;r...
function Nq (line 198) | function Nq(a,b){a=a|0;b=b|0;c[a+696>>2]=c[b>>2];c[a+696+4>>2]=c[b+4>>2]...
function Oq (line 198) | function Oq(a,b){a=a|0;b=b|0;c[a+680>>2]=c[b>>2];c[a+680+4>>2]=c[b+4>>2]...
function Pq (line 198) | function Pq(a,b){a=a|0;b=b|0;c[a+60>>2]=c[b>>2];c[a+60+4>>2]=c[b+4>>2];c...
function Qq (line 198) | function Qq(a,b){a=a|0;b=b|0;c[a+28>>2]=c[b>>2];c[a+28+4>>2]=c[b+4>>2];c...
function Rq (line 198) | function Rq(a,b){a=a|0;b=b|0;c[a+156>>2]=c[b>>2];c[a+156+4>>2]=c[b+4>>2]...
function Sq (line 198) | function Sq(b,c,d){b=b|0;c=c|0;d=d|0;a[b+1309+c>>0]=d&1;if((c|0)<3){a[b+...
function Tq (line 198) | function Tq(a,c){a=a|0;c=c|0;if(!((b[c+4>>1]&b[a+14>>1])<<16>>16)){a=0;r...
function Uq (line 198) | function Uq(a,b){a=a|0;b=b|0;c[a+108>>2]=c[b>>2];c[a+108+4>>2]=c[b+4>>2]...
function Vq (line 198) | function Vq(b){b=b|0;if(a[22656]|0)return 23120;if(!(jy(22656)|0))return...
function Wq (line 198) | function Wq(a,b){a=a|0;b=b|0;c[a+20>>2]=c[b>>2];c[a+20+4>>2]=c[b+4>>2];c...
function Xq (line 198) | function Xq(a){a=a|0;var b=0;do{c[a+4>>2]=0;g[a+8>>2]=0.0;b=c[a+24>>2]|0...
function Yq (line 198) | function Yq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;ud(a,b,c,d,e...
function Zq (line 198) | function Zq(a,b){a=a|0;b=b|0;c[a+172>>2]=c[b>>2];c[a+172+4>>2]=c[b+4>>2]...
function _q (line 198) | function _q(a,b){a=a|0;b=b|0;c[a+32>>2]=c[b>>2];c[a+32+4>>2]=c[b+4>>2];c...
function $q (line 198) | function $q(a){a=a|0;g[a>>2]=5.880000114440918;g[a+4>>2]=.82999998331069...
function ar (line 198) | function ar(a,b){a=a|0;b=b|0;c[a+24>>2]=c[b>>2];c[a+24+4>>2]=c[b+4>>2];c...
function br (line 198) | function br(a,b){a=a|0;b=b|0;c[a+316>>2]=c[b>>2];c[a+316+4>>2]=c[b+4>>2]...
function cr (line 198) | function cr(a,b){a=a|0;b=b|0;c[a+300>>2]=c[b>>2];c[a+300+4>>2]=c[b+4>>2]...
function dr (line 198) | function dr(a,b){a=a|0;b=b|0;c[a+64>>2]=c[b>>2];c[a+64+4>>2]=c[b+4>>2];c...
function er (line 198) | function er(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=as()|0;Td(e,a,b,c...
function fr (line 198) | function fr(a,b){a=a|0;b=b|0;c[a+52>>2]=c[b>>2];c[a+52+4>>2]=c[b+4>>2];c...
function gr (line 198) | function gr(a,b){a=a|0;b=b|0;c[a+188>>2]=c[b>>2];c[a+188+4>>2]=c[b+4>>2]...
function hr (line 198) | function hr(a,b){a=a|0;b=b|0;c[a+40>>2]=c[b>>2];c[a+40+4>>2]=c[b+4>>2];c...
function ir (line 198) | function ir(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=c[b>>2];c[a...
function jr (line 198) | function jr(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...
function kr (line 198) | function kr(a,b){a=a|0;b=b|0;c[a+16>>2]=c[b>>2];c[a+16+4>>2]=c[b+4>>2];c...
function lr (line 198) | function lr(a,b,d){a=a|0;b=b|0;d=+d;jb[c[(c[a>>2]|0)+32>>2]&127](a,b);Tb...
function mr (line 198) | function mr(a,b){a=a|0;b=b|0;c[a+68>>2]=c[b>>2];c[a+68+4>>2]=c[b+4>>2];c...
function nr (line 198) | function nr(a,b){a=a|0;b=b|0;c[a+36>>2]=c[b>>2];c[a+36+4>>2]=c[b+4>>2];c...
function or (line 198) | function or(a,b){a=a|0;b=b|0;c[a>>2]=c[b+248>>2];c[a+4>>2]=c[b+248+4>>2]...
function pr (line 198) | function pr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Yr()|0;Gd(d,a,b,c);return...
function qr (line 198) | function qr(){var a=0;a=fs()|0;rn();rn();mq(a,22848,22848);return a|0}
function rr (line 198) | function rr(a,b,d){a=a|0;b=b|0;d=d|0;if((c[a+4>>2]|0)==(b|0)?(c[a+28>>2]...
function sr (line 198) | function sr(){var a=0,b=0;b=Xr(c[5682]|0,c[5683]|0,1284865837,1481765933...
function tr (line 198) | function tr(a,b){a=a|0;b=b|0;c[a+48>>2]=c[b>>2];c[a+48+4>>2]=c[b+4>>2];c...
function ur (line 198) | function ur(){var a=0,b=0;a=l;l=l+16|0;if(!(Wa(26296,3)|0)){b=Ma(c[6575]...
function vr (line 198) | function vr(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]+ +g[b>>2];g[a+4>>2]=+g[a+4...
function wr (line 198) | function wr(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];g[a+4>>2]=+g[a+4>...
function xr (line 198) | function xr(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+64|0;Po(c,b,a+68|0);zq(a+4|...
function yr (line 198) | function yr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;Je(a,b...
function zr (line 198) | function zr(a){a=a|0;var b=0;b=Br(112)|0;bg(b,a);return b|0}
function Ar (line 198) | function Ar(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=as()|0;Td(d,a,b,c&65535,0...
function Br (line 198) | function Br(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=ec(b)|0;if(a|0)br...
function Cr (line 198) | function Cr(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>...
function Dr (line 198) | function Dr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=Or(1252)|0;oc(e,a...
function Er (line 198) | function Er(a,b){a=a|0;b=b|0;c[a+72>>2]=c[b>>2];c[a+72+4>>2]=c[b+4>>2];c...
function Fr (line 198) | function Fr(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]*+g[b>>2];g[a+4>>2]=+g[a+4>...
function Gr (line 198) | function Gr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2...
function Hr (line 198) | function Hr(a){a=a|0;var b=0;b=l;l=l+16|0;Pc(a);if(!(Oa(c[6575]|0,0)|0))...
function Ir (line 198) | function Ir(a,b){a=a|0;b=b|0;c[a+8>>2]=c[b>>2];c[a+8+4>>2]=c[b+4>>2];c[a...
function Jr (line 198) | function Jr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(215)|0;if(!a){a=0;retur...
function Kr (line 198) | function Kr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=zs()|0;Ie(d,a,b,c);return...
function Lr (line 198) | function Lr(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return _b(b,c,d,e)|0}
function Mr (line 198) | function Mr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(203)|0;if(!a){a=0;retur...
function Nr (line 198) | function Nr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(1407)|0;if(!a){a=0;retu...
function Or (line 198) | function Or(a){a=a|0;c[6432]=(c[6432]|0)+1;a=ec(a+19|0)|0;if(!a){a=0;ret...
function Pr (line 198) | function Pr(a){a=a|0;var b=0;b=fs()|0;rn();mq(b,a,22848);return b|0}
function Qr (line 198) | function Qr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(191)|0;if(!a){a=0;retur...
function Rr (line 198) | function Rr(a,b){a=a|0;b=b|0;if(!b?c[a+204>>2]&3|0:0)return;if((c[a+216>...
function Sr (line 198) | function Sr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a+-4>>2]|0)+8>>2]&1...
function Tr (line 198) | function Tr(a,b){a=a|0;b=b|0;var c=0.0;c=+LD(a);c=+PG(c*+LD(b));return +...
function Ur (line 198) | function Ur(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c...
function Vr (line 198) | function Vr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(143)|0;if(!a){a=0;retur...
function Wr (line 198) | function Wr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(115)|0;if(!a){a=0;retur...
function Xr (line 198) | function Xr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=hp(a,c)|0;f=z...
function Yr (line 198) | function Yr(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(1331)|0;if(!a){a=0;retu...
function Zr (line 198) | function Zr(b){b=b|0;var d=0;d=c[b+12>>2]|0;if(!d)return;if(a[b+16>>0]&1...
function _r (line 198) | function _r(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h...
function $r (line 198) | function $r(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(379)|0;if(!a){a=0;retur...
function as (line 198) | function as(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(135)|0;if(!a){a=0;retur...
function bs (line 198) | function bs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}
function cs (line 198) | function cs(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(627)|0;if(!a){a=0;retur...
function ds (line 198) | function ds(a,b){a=a|0;b=b|0;var c=0;c=as()|0;Td(c,a,b,16384,0,0);return...
function es (line 198) | function es(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(791)|0;if(!a){a=0;retur...
function fs (line 198) | function fs(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(219)|0;if(!a){a=0;retur...
function gs (line 198) | function gs(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(1147)|0;if(!a){a=0;retu...
function hs (line 198) | function hs(a,b){a=a|0;b=b|0;var c=0;c=Br(80)|0;wm(c,a,b);return c|0}
function is (line 198) | function is(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(103)|0;if(!a){a=0;retur...
function js (line 198) | function js(a){a=+a;a=+WF(a);if(a<-3.1415927410125732){a=a+6.28318548202...
function ks (line 198) | function ks(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(783)|0;if(!a){a=0;retur...
function ls (line 198) | function ls(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(131)|0;if(!a){a=0;retur...
function ms (line 198) | function ms(a,b){a=a|0;b=b|0;c[a+348>>2]=c[b>>2];c[a+348+4>>2]=c[b+4>>2]...
function ns (line 198) | function ns(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(111)|0;if(!a){a=0;retur...
function os (line 198) | function os(a,b){a=a|0;b=b|0;c[a+480>>2]=b;if(!b)return;jb[c[(c[b>>2]|0)...
function ps (line 198) | function ps(a,b){a=a|0;b=b|0;var c=0;c=zs()|0;Ie(c,a,b,1);return c|0}
function qs (line 198) | function qs(a){a=a|0;var b=0;b=Br(92)|0;Ed(b,a);return b|0}
function rs (line 198) | function rs(a,b){a=a|0;b=b|0;c[a>>2]=1065353216;c[a+4>>2]=1065353216;c[a...
function ss (line 198) | function ss(b){b=b|0;if(!(lb[c[(c[b>>2]|0)+40>>2]&127](b)|0))return;c[b+...
function ts (line 198) | function ts(a){a=a|0;Oz(a+144|0);Oz(a+124|0);Oz(a+104|0);return}
function us (line 198) | function us(a,b){a=a|0;b=b|0;var d=0;d=c[a+8>>2]|0;Rb[c[d+60>>2]&127](b,...
function vs (line 198) | function vs(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(71)|0;if(!a){a=0;return...
function ws (line 198) | function ws(a,b){a=a|0;b=b|0;var d=0;d=a+92|0;do{c[a>>2]=c[b>>2];a=a+4|0...
function xs (line 198) | function xs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;vg(a,b,c,d);return}
function ys (line 198) | function ys(a){a=a|0;if(!a){a=0;return a|0}a=Cq(a)|0;return a|0}
function zs (line 198) | function zs(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(95)|0;if(!a){a=0;return...
function As (line 198) | function As(a,b){a=a|0;b=b|0;return +(+dx(+g[a>>2],+g[a+4>>2],+g[a+8>>2]...
function Bs (line 198) | function Bs(a,b){a=a|0;b=b|0;var c=0;c=Br(84)|0;Jm(c,a,b);return c|0}
function Cs (line 198) | function Cs(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c...
function Ds (line 198) | function Ds(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(75)|0;if(!a){a=0;return...
function Es (line 198) | function Es(a){a=a|0;var b=0;b=l;l=l+16|0;c[b>>2]=bH(c[a+60>>2]|0)|0;a=h...
function Fs (line 198) | function Fs(){var a=0;c[6432]=(c[6432]|0)+1;a=ec(35)|0;if(!a){a=0;return...
function Gs (line 198) | function Gs(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;ret...
function Hs (line 198) | function Hs(a){a=a|0;Xf(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function Is (line 198) | function Is(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+8>>2]&127]...
function Js (line 198) | function Js(a){a=a|0;c[a>>2]=2928;g[a+4>>2]=1.0;c[a+8>>2]=0;b[a+12>>1]=1...
function Ks (line 198) | function Ks(a){a=a|0;var b=0;b=Ds()|0;Ih(b,a);c[b>>2]=8472;c[b+52>>2]=2;...
function Ls (line 198) | function Ls(a){a=a|0;var b=0;b=Ds()|0;Ih(b,a);c[b>>2]=8368;c[b+52>>2]=0;...
function Ms (line 198) | function Ms(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=4096;c[a+12>>2]=409...
function Ns (line 198) | function Ns(a,b,d){a=a|0;b=b|0;d=d|0;ge(c[a+116>>2]|0,c[a+144>>2]|0,b,d)...
function Os (line 198) | function Os(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=b;a=Vp(a,c)|0;l...
function Ps (line 198) | function Ps(a,b){a=a|0;b=b|0;var c=0;c=fs()|0;mq(c,a,b);return c|0}
function Qs (line 198) | function Qs(a,b,d){a=a|0;b=b|0;d=d|0;Rb[c[(c[b>>2]|0)+64>>2]&127](a,b,d)...
function Rs (line 198) | function Rs(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0.0}
function Ss (line 198) | function Ss(a,b,d){a=a|0;b=+b;d=d|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[...
function Ts (line 198) | function Ts(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+80>>2]&127...
function Us (line 198) | function Us(a){a=a|0;if(!a){a=0;return a|0}a=Iq(a)|0;return a|0}
function Vs (line 198) | function Vs(){var a=0;a=l;l=l+16|0;if(!(Pa(26300,262)|0)){l=a;return}els...
function Ws (line 198) | function Ws(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;retu...
function Xs (line 198) | function Xs(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=b;a=Fr(a,c)|0;l...
function Ys (line 198) | function Ys(a){a=a|0;if(c[a+204>>2]&3|0)return;if((c[a+216>>2]&-2|0)!=4)...
function Zs (line 198) | function Zs(a,b){a=a|0;b=b|0;un(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}
function _s (line 198) | function _s(){var a=0;a=Br(8)|0;c[a>>2]=0;c[a+4>>2]=0;Xx(a);return a|0}
function $s (line 198) | function $s(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;Gb[c[(c[a>>2]|0)+8>>2]&31](a,...
function at (line 198) | function at(a,b){a=a|0;b=b|0;Aq(a,b);Ur(a+48|0,b+48|0,b+52|0,b+56|0);ret...
function bt (line 198) | function bt(a,b,d){a=a|0;b=b|0;d=d|0;xg(c[a+116>>2]|0,b,d);return}
function ct (line 198) | function ct(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+192>>2]=b...
function dt (line 198) | function dt(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;xb[...
function et (line 198) | function et(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g...
function ft (line 198) | function ft(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+24>>2]&127...
function gt (line 198) | function gt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+88>>2]&127...
function ht (line 198) | function ht(a,b,d){a=a|0;b=b|0;d=d|0;Rb[c[(c[b>>2]|0)+68>>2]&127](a,b,d)...
function it (line 198) | function it(b,d){b=b|0;d=d|0;b=(a[b+344>>0]|0)==0?3:0;c[d>>2]=b;c[d+4>>2...
function jt (line 198) | function jt(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=1.0/b;a=Vp(a,c)...
function kt (line 198) | function kt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+36>>2]&127...
function lt (line 198) | function lt(a,b,d){a=a|0;b=+b;d=d|0;return Ub[c[(c[a>>2]|0)+52>>2]&1](a,...
function mt (line 198) | function mt(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<<c|(a&(1<<c)-1<<32...
function nt (line 198) | function nt(a,b,d){a=a|0;b=+b;d=d|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[...
function ot (line 198) | function ot(a,b){a=a|0;b=b|0;Gn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}
function pt (line 198) | function pt(a,b,d,e){a=a|0;b=+b;d=d|0;e=+e;return Ub[c[(c[a>>2]|0)+52>>2...
function qt (line 198) | function qt(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1065353216;...
function rt (line 198) | function rt(a,b){a=a|0;b=b|0;c[a>>2]=1065353216;c[a+4>>2]=0;c[a+8>>2]=0;...
function st (line 198) | function st(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=1065353216;c[a+8>>2]=0;...
function tt (line 198) | function tt(a,b){a=a|0;b=b|0;Rb[c[(c[a>>2]|0)+8>>2]&127](a,b,c[(c[a+8>>2...
function ut (line 198) | function ut(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;wb[a...
function vt (line 198) | function vt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;ib[a...
function wt (line 198) | function wt(a,b){a=a|0;b=b|0;Hn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}
function xt (line 198) | function xt(b,d,e){b=b|0;d=d|0;e=+e;g[(c[b+720>>2]|0)+(d*104|0)+88>>2]=e...
function yt (line 198) | function yt(a,b,d){a=a|0;b=b|0;d=+d;Tb[c[(c[a>>2]|0)+20>>2]&7](a,b,d);re...
function zt (line 198) | function zt(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(...
function At (line 198) | function At(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+124>>2]&12...
function Bt (line 198) | function Bt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a+120>>2]=b;c[a+124>>2]=d...
function Ct (line 198) | function Ct(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;pb[c[(c[a>>2]|0)+8>>2]&31](...
function Dt (line 198) | function Dt(a,b){a=a|0;b=b|0;zp(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}
function Et (line 198) | function Et(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;Ur(a,b,d,e);c[a+12>...
function Ft (line 198) | function Ft(b,c,d,e){b=b|0;c=c|0;d=+d;e=+e;a[b+737>>0]=c&1;g[b+680>>2]=d...
function Gt (line 198) | function Gt(a,b){a=a|0;b=b|0;Cn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}
function Ht (line 198) | function Ht(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;pn(a,b,c,d,e,f);...
function It (line 198) | function It(a){a=a|0;Nj(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function Jt (line 198) | function Jt(a){a=a|0;pl(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function Kt (line 198) | function Kt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;nb[a&...
function Lt (line 198) | function Lt(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function Mt (line 198) | function Mt(a,b,d){a=a|0;b=b|0;d=d|0;Vb[c[(c[a>>2]|0)+36>>2]&127](a,b,d,...
function Nt (line 198) | function Nt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 1.0}
function Ot (line 198) | function Ot(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}
function Pt (line 198) | function Pt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Vb[c[(c[a>>2]|0)+32>>2]&127...
function Qt (line 198) | function Qt(a){a=a|0;wg(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function Rt (line 198) | function Rt(){}
function St (line 198) | function St(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;r...
function Tt (line 198) | function Tt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Df(a,b,c,d,e);return}
function Ut (line 198) | function Ut(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Mf(a,b,c,d,e);return}
function Vt (line 198) | function Vt(a){a=a|0;var b=0.0,c=0;c=+Lo(a,a)<0.0;b=+g[a+12>>2];return +...
function Wt (line 198) | function Wt(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function Xt (line 198) | function Xt(a,b){a=a|0;b=b|0;He(a,b);return}
function Yt (line 198) | function Yt(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+...
function Zt (line 198) | function Zt(a,b){a=a|0;b=b|0;xg(c[a+116>>2]|0,b,1);return}
function _t (line 198) | function _t(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;zq(a+4|0,b);r...
function $t (line 198) | function $t(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 +tb[...
function au (line 198) | function au(a,b){a=a|0;b=b|0;var c=0;c=Qr()|0;Qf(c,a,b);return c|0}
function bu (line 198) | function bu(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Ci(c[b>>2]|0,c[b+4>>2]|0,a...
function cu (line 198) | function cu(a,b){a=a|0;b=b|0;Ep(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}
function du (line 198) | function du(a,b,d){a=a|0;b=b|0;d=d|0;Vb[c[(c[a>>2]|0)+36>>2]&127](a,b,d,...
function eu (line 198) | function eu(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=1.0/b;Fr(a,c)|0...
function fu (line 198) | function fu(a,b){a=a|0;b=+b;return Ub[c[(c[a>>2]|0)+52>>2]&1](a,b,1,.016...
function gu (line 198) | function gu(a){a=a|0;var b=0;b=Br(8)|0;_u(b,a);return b|0}
function hu (line 198) | function hu(a,b,d){a=a|0;b=b|0;d=d|0;Rb[c[(c[a>>2]|0)+56>>2]&127](a,b,d)...
function iu (line 198) | function iu(a,b,d){a=a|0;b=b|0;d=+d;Tb[c[(c[a>>2]|0)+36>>2]&7](a,b,d);re...
function ju (line 198) | function ju(a){a=a|0;Vh(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function ku (line 198) | function ku(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g...
function lu (line 198) | function lu(a){a=a|0;dj(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function mu (line 198) | function mu(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;pn(a,b,c,d,e,1.0);return}
function nu (line 198) | function nu(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;return +Nb[a...
function ou (line 198) | function ou(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;Ft(a,b,c,d);return}
function pu (line 198) | function pu(a){a=a|0;c[a>>2]=8184;if(!a)return;c[6433]=(c[6433]|0)+1;Pc(...
function qu (line 198) | function qu(a,b){a=a|0;b=b|0;return c[(tA(c[a+24>>2]|0,b)|0)+64>>2]|0}
function ru (line 198) | function ru(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;fb[a&31](b|...
function su (line 198) | function su(a){a=a|0;if(!(c[a+12>>2]|0)){a=0;return a|0}a=c[a+20>>2]|0;r...
function tu (line 198) | function tu(a){a=a|0;Zr(a);qv(a);return}
function uu (line 198) | function uu(a){a=a|0;Ql(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function vu (line 198) | function vu(a,b){a=a|0;b=b|0;var c=0;c=Br(64)|0;Ip(c,a,b);return c|0}
function wu (line 198) | function wu(){var a=0;a=Br(24)|0;Ms(a);return a|0}
function xu (line 198) | function xu(a,b,d){a=a|0;b=b|0;d=+d;gb[c[(c[a>>2]|0)+16>>2]&31](a,d);ret...
function yu (line 198) | function yu(a,b,c){a=a|0;b=b|0;c=c|0;In(a,b,c);return}
function zu (line 198) | function zu(a,b){a=a|0;b=b|0;Vb[c[(c[a>>2]|0)+36>>2]&127](a,b,2,-3);return}
function Au (line 198) | function Au(a,b,d){a=a|0;b=+b;d=d|0;qb[c[(c[a>>2]|0)+32>>2]&15](a,b,d);r...
function Bu (line 198) | function Bu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return}
function Cu (line 198) | function Cu(a){a=a|0;Wh(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function Du (line 198) | function Du(a){a=a|0;Yh(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function Eu (line 198) | function Eu(a,b){a=a|0;b=b|0;co(a,b);return}
function Fu (line 198) | function Fu(a,b){a=a|0;b=b|0;co(a,b);return}
function Gu (line 198) | function Gu(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...
function Hu (line 198) | function Hu(a,b){a=a|0;b=b|0;co(a,b);return}
function Iu (line 198) | function Iu(a,b){a=a|0;b=b|0;return c[(pC(c[a+276>>2]|0,b)|0)>>2]|0}
function Ju (line 198) | function Ju(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Jb[a&1](b|0,...
function Ku (line 198) | function Ku(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;Cb[a&0](b|0,...
function Lu (line 198) | function Lu(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...
function Mu (line 198) | function Mu(a){a=a|0;if(!(+g[a+16>>2]==0.0)){a=0;return a|0}a=+g[a+20>>2...
function Nu (line 198) | function Nu(a){a=a|0;c[a>>2]=4560;if(!a)return;c[6433]=(c[6433]|0)+1;Pc(...
function Ou (line 198) | function Ou(a){a=a|0;c[a>>2]=5132;if(!a)return;c[6433]=(c[6433]|0)+1;Pc(...
function Pu (line 198) | function Pu(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+16>>2]&127](a,b);return}
function Qu (line 198) | function Qu(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+40>>2]&127](a,b);return}
function Ru (line 198) | function Ru(a,b,d){a=a|0;b=b|0;d=+d;Tb[c[(c[a>>2]|0)+8>>2]&7](a,b,d);ret...
function Su (line 198) | function Su(a,b){a=a|0;b=b|0;Py(a,b);return}
function Tu (line 198) | function Tu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Fc(a,b,c,d)|0;return 1}
function Uu (line 198) | function Uu(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+68>>2]&127](a,b);return}
function Vu (line 198) | function Vu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ir(a,b,c,d,e);return}
function Wu (line 198) | function Wu(a){a=a|0;var b=0;b=Qr()|0;Qf(b,a,1);return b|0}
function Xu (line 198) | function Xu(a,b,d){a=a|0;b=+b;d=d|0;g[(c[a+144>>2]|0)+(d*284|0)+232>>2]=...
function Yu (line 198) | function Yu(a,b,d){a=a|0;b=+b;d=d|0;g[(c[a+144>>2]|0)+(d*284|0)+252>>2]=...
function Zu (line 198) | function Zu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}
function _u (line 198) | function _u(a,b){a=a|0;b=b|0;CF(a);c[a>>2]=4980;c[a+4>>2]=b;return}
function $u (line 198) | function $u(a,b){a=a|0;b=b|0;uq(a,b);return}
function av (line 198) | function av(a,b){a=a|0;b=b|0;Bq(a,b);return}
function bv (line 198) | function bv(a,b){a=a|0;b=b|0;Vb[c[(c[a>>2]|0)+36>>2]&127](a,b,1,-1);return}
function cv (line 198) | function cv(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}
function dv (line 198) | function dv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+64>>2]&127](a,b);return}
function ev (line 198) | function ev(a,b,c){a=a|0;b=b|0;c=c|0;Hh(b,c);return}
function fv (line 198) | function fv(a){a=a|0;hd(a);if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>...
function gv (line 198) | function gv(a){a=a|0;c[a>>2]=3100;g[a+4>>2]=1.0;b[a+8>>1]=1;b[a+10>>1]=-...
function hv (line 198) | function hv(a,b){a=a|0;b=b|0;return c[(pC(c[a+12>>2]|0,b)|0)>>2]|0}
function iv (line 198) | function iv(a,b){a=a|0;b=b|0;if((c[a+216>>2]&-2|0)==4)return;c[a+216>>2]...
function jv (line 198) | function jv(a,b){a=a|0;b=b|0;Nq(a,b);return}
function kv (line 198) | function kv(a,b){a=a|0;b=b|0;Oq(a,b);return}
function lv (line 198) | function lv(a,b){a=a|0;b=b|0;Rb[c[(c[a>>2]|0)+56>>2]&127](a,b,0);return}
function mv (line 198) | function mv(a,b){a=a|0;b=+b;Pw(a,b);return}
function nv (line 198) | function nv(a,b){a=a|0;b=b|0;return Gb[c[(c[a>>2]|0)+40>>2]&31](a,b)|0}
function ov (line 198) | function ov(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+60>>2]&127](a,b);return}
function pv (line 198) | function pv(a,b,d){a=a|0;b=b|0;d=+d;jb[c[(c[a>>2]|0)+12>>2]&127](a,b);re...
function qv (line 198) | function qv(b){b=b|0;a[b+16>>0]=1;c[b+12>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;r...
function rv (line 198) | function rv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+92>>2]&127](a,b);return}
function sv (line 198) | function sv(a,b){a=a|0;b=b|0;Qm(a,b);return}
function tv (line 198) | function tv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return pb[a&31](b|0...
function uv (line 198) | function uv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+32>>2]&127](a,b);return}
function vv (line 198) | function vv(a){a=a|0;var b=0;b=Ds()|0;Ih(b,a);return b|0}
function wv (line 198) | function wv(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...
function xv (line 198) | function xv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (z=b+d+(a+c>>>0>>>0<...
function yv (line 198) | function yv(a,b,d){a=a|0;b=+b;d=d|0;g[(c[a+144>>2]|0)+(d*284|0)+256>>2]=...
function zv (line 198) | function zv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+84>>2]&127](a,b);return}
function Av (line 198) | function Av(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;fm(a,b,c,d);return}
function Bv (line 198) | function Bv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+28>>2]&127](a,b);return}
function Cv (line 198) | function Cv(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;uk(a,d);Km()...
function Dv (line 198) | function Dv(a,b){a=a|0;b=+b;c[a+260>>2]=(c[a+260>>2]|0)+1;g[a+232>>2]=b;...
function Ev (line 198) | function Ev(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return +Ob[a&1](b|0...
function Fv (line 198) | function Fv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+72>>2]&127](a,b);return}
function Gv (line 198) | function Gv(){var a=0;a=ls()|0;Wf(a,0,0,16);return a|0}
function Hv (line 198) | function Hv(a){a=a|0;var b=0;b=Br(284)|0;oj(b,a);return b|0}
function Iv (line 198) | function Iv(a){a=a|0;if(!a)return;hb[c[(c[a>>2]|0)+8>>2]&511](a);return}
function Jv (line 198) | function Jv(a,b){a=a|0;b=+b;g[a+36>>2]=b;g[a+40>>2]=+E(+b);return}
function Kv (line 198) | function Kv(a){a=a|0;if(!a)return;hb[c[(c[a>>2]|0)+4>>2]&511](a);return}
function Lv (line 198) | function Lv(a,b){a=a|0;b=+b;return +(+zb[c[(c[a>>2]|0)+16>>2]&15](a)*b)}
function Mv (line 198) | function Mv(a){a=a|0;eu(a,+dz(+g[a>>2],+g[a+4>>2],+g[a+8>>2]));return}
function Nv (line 198) | function Nv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h...
function Ov (line 198) | function Ov(a,b){a=a|0;b=+b;_z(a,b);return}
function Pv (line 198) | function Pv(a,b){a=a|0;b=b|0;Hu(a+868|0,b);return}
function Qv (line 198) | function Qv(a,b){a=a|0;b=+b;c[a+260>>2]=(c[a+260>>2]|0)+1;g[a+228>>2]=b;...
function Rv (line 198) | function Rv(a,b){a=a|0;b=b|0;ze(a,b);return}
function Sv (line 198) | function Sv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+8>>2]&127](a,b);return}
function Tv (line 198) | function Tv(a){a=a|0;if(!a)return;Oz(a);YG(a);return}
function Uv (line 198) | function Uv(a,b,c){a=a|0;b=b|0;c=c|0;fi(a,b,c);return}
function Vv (line 198) | function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Vb[a&127](b|0,c|0,d...
function Wv (line 198) | function Wv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+12>>2]&127](a,b);return}
function Xv (line 198) | function Xv(a,b,c){a=a|0;b=b|0;c=c|0;Vk(a,b,c);return}
function Yv (line 198) | function Yv(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+68>>2]&127](a,b);return}
function Zv (line 198) | function Zv(a,b){a=a|0;b=+b;c[a+260>>2]=(c[a+260>>2]|0)+1;g[a+224>>2]=b;...
function _v (line 198) | function _v(){var a=0;a=Qr()|0;Qf(a,1,1);return a|0}
function $v (line 198) | function $v(a,b,c){a=a|0;b=+b;c=+c;Lw(a,b,c);return}
function aw (line 198) | function aw(a,b){a=a|0;b=+b;gb[c[(c[a>>2]|0)+20>>2]&31](a,b);return}
function bw (line 198) | function bw(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;ml(a,b,c,d);return}
function cw (line 198) | function cw(a,b){a=a|0;b=+b;gb[c[(c[a>>2]|0)+16>>2]&31](a,b);return}
function dw (line 198) | function dw(a,b){a=a|0;b=b|0;return +(+g[(c[a+144>>2]|0)+(b*284|0)+232>>...
function ew (line 198) | function ew(){var a=0;a=Br(196)|0;xh(a,0);return a|0}
function fw (line 198) | function fw(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+24>>2]&127](a,b);return}
function gw (line 198) | function gw(a,b,d){a=a|0;b=b|0;d=d|0;c[a+20>>2]=b;c[a+28>>2]=d;return}
function hw (line 198) | function hw(a,b,d){a=a|0;b=b|0;d=d|0;c[a+16>>2]=b;c[a+24>>2]=d;return}
function iw (line 198) | function iw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}
function jw (line 198) | function jw(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=+e;return Ub[a&1](b|0,+c...
function kw (line 198) | function kw(a,b,c){a=a|0;b=b|0;c=+c;om(a,b,c);return}
function lw (line 198) | function lw(a,b){a=a|0;b=b|0;jb[c[(c[a>>2]|0)+64>>2]&127](a,b);return}
function mw (line 198) | function mw(a){a=a|0;var b=0;b=((bH(c[a+236>>2]|0)|0)&2|0)==0;return (b?...
function nw (line 198) | function nw(a,b){a=a|0;b=b|0;return CA(c[a+12>>2]|0,b)|0}
function ow (line 198) | function ow(a,b,c){a=a|0;b=b|0;c=c|0;Hl(a,b,c);return}
function pw (line 198) | function pw(a,b,c){a=a|0;b=b|0;c=+c;g[a+1340+(b<<2)>>2]=c;return}
function qw (line 198) | function qw(a,b,c){a=a|0;b=b|0;c=c|0;return $b(a,b,c)|0}
function rw (line 198) | function rw(a,b){a=a|0;b=b|0;Jw(a,b);return}
function sw (line 198) | function sw(a,b,c){a=a|0;b=b|0;c=+c;rq(a,b,c);return}
function tw (line 198) | function tw(a){a=a|0;c[a>>2]=3768;yi(a+12|0);YG(a);return}
function uw (line 198) | function uw(a,b){a=a|0;b=b|0;sv(a+708|0,b);return}
function vw (line 198) | function vw(a){a=a|0;if(!a)return;HD(a);YG(a);return}
function ww (line 198) | function ww(a,b,c){a=a|0;b=b|0;c=+c;g[a+1364+(b<<2)>>2]=c;return}
function xw (line 198) | function xw(a,b){a=a|0;b=b|0;ee(a,b);return}
function yw (line 198) | function yw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;Qb[a&15](b|0,c|0,d|0...
function zw (line 198) | function zw(a){a=+a;var b=0;b=vs()|0;Wo(b,a);return b|0}
function Aw (line 198) | function Aw(a,b){a=a|0;b=b|0;_t(a,b);return}
function Bw (line 198) | function Bw(a,b){a=a|0;b=+b;g[a+132>>2]=b;return}
function Cw (line 198) | function Cw(a,b){a=a|0;b=+b;Px(a,b);return}
function Dw (line 198) | function Dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;mb[a&7](b|0,c|0,+d,e...
function Ew (line 198) | function Ew(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ob[a&0](b|0,+c,d|0,e...
function Fw (line 198) | function Fw(a,b){a=a|0;b=+b;g[a+128>>2]=b;return}
function Gw (line 198) | function Gw(a,b){a=a|0;b=b|0;IA(a,b);return}
function Hw (line 198) | function Hw(a,b){a=a|0;b=b|0;br(a,b);return}
function Iw (line 198) | function Iw(a,b){a=a|0;b=b|0;cr(a,b);return}
function Jw (line 198) | function Jw(a,b){a=a|0;b=b|0;c[a+176>>2]=(b|0)<0?0:(b|0)<2?b:2;return}
function Kw (line 198) | function Kw(a,b){a=a|0;b=b|0;c[a+24>>2]=b;return}
function Lw (line 198) | function Lw(a,b,c){a=a|0;b=+b;c=+c;g[a+472>>2]=b;g[a+476>>2]=c;return}
function Mw (line 198) | function Mw(a,b){a=a|0;b=b|0;return VA(a,b)|0}
function Nw (line 198) | function Nw(a,b){a=a|0;b=b|0;g[a+48>>2]=+(b|0);return}
function Ow (line 198) | function Ow(a){a=a|0;var b=0;b=l;l=l+16|0;Sb[a&3]();Cv(22392,b)}
function Pw (line 198) | function Pw(b,c){b=b|0;c=+c;g[b+572>>2]=c;a[b+553>>0]=1;return}
function Qw (line 198) | function Qw(a,b){a=a|0;b=b|0;return c[(c[a+20>>2]|0)+(b<<2)>>2]|0}
function Rw (line 198) | function Rw(a){a=a|0;return +(+mG(+g[a+16>>2]))}
function Sw (line 198) | function Sw(a){a=a|0;return lb[c[(c[a>>2]|0)+40>>2]&127](a)|0}
function Tw (line 198) | function Tw(a){a=a|0;var b=0;b=(bH(c[a+236>>2]|0)|0)==4;return (b?a:0)|0}
function Uw (line 198) | function Uw(a){a=a|0;return +(+dz(+g[a>>2],+g[a+4>>2],+g[a+8>>2]))}
function Vw (line 198) | function Vw(a,b){a=a|0;b=+b;uA(a,b);return}
function Ww (line 198) | function Ww(a,b){a=a|0;b=b|0;YA(a,b);return}
function Xw (line 198) | function Xw(a,b){a=a|0;b=b|0;sA(a,b);return}
function Yw (line 198) | function Yw(a,b){a=a|0;b=+b;gb[c[(c[a>>2]|0)+44>>2]&31](a,b);return}
function Zw (line 198) | function Zw(a,b){a=a|0;b=b|0;Jp(a,b);return}
function _w (line 198) | function _w(a,b){a=a|0;b=+b;g[a+136>>2]=b;return}
function $w (line 198) | function $w(a){a=a|0;return xE(+g[a+4>>2])|0}
function ax (line 198) | function ax(a){a=a|0;if(!a)return;c[6433]=(c[6433]|0)+1;Pc(c[a+-4>>2]|0)...
function bx (line 198) | function bx(a,b){a=a|0;b=b|0;return (c[a+144>>2]|0)+(b*284|0)+92|0}
function cx (line 198) | function cx(a,b){a=a|0;b=b|0;return Iu(a,b)|0}
function dx (line 198) | function dx(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=+d;e=+e;f=+f;return +(a*d+b*e+...
function ex (line 198) | function ex(a){a=a|0;c[a>>2]=2880;b[a+4>>1]=1;b[a+6>>1]=-1;return}
function fx (line 198) | function fx(a){a=a|0;var b=0;b=(bH(c[a+236>>2]|0)|0)==8;return (b?a:0)|0}
function gx (line 198) | function gx(){var a=0;a=Br(24)|0;$q(a);return a|0}
function hx (line 198) | function hx(a,b){a=a|0;b=b|0;Mp(a,b);return}
function ix (line 198) | function ix(a,b){a=a|0;b=+b;jB(a,b);return}
function jx (line 198) | function jx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}
function kx (line 198) | function kx(a){a=a|0;g[a>>2]=.30000001192092896;g[a+4>>2]=1.0;g[a+8>>2]=...
function lx (line 198) | function lx(a,b){a=a|0;b=+b;EA(a,b);return}
function mx (line 198) | function mx(a){a=a|0;hb[c[(c[a>>2]|0)+44>>2]&511](a);return}
function nx (line 198) | function nx(a,b){a=a|0;b=b|0;zq(a+4|0,b);return}
function ox (line 198) | function ox(a){a=a|0;return XD(c[a+204>>2]|0)|0}
function px (line 198) | function px(a,b){a=a|0;b=+b;kB(a,b);return}
function qx (line 198) | function qx(a,b){a=a|0;b=+b;sy(a,b);return}
function rx (line 198) | function rx(a,b){a=a|0;b=+b;lB(a,b);return}
function sx (line 198) | function sx(a,b){a=a|0;b=+b;ty(a,b);return}
function tx (line 198) | function tx(a,b){a=a|0;b=b|0;os(a,b);return}
function ux (line 198) | function ux(a,b){a=a|0;b=b|0;Op(a,b);return}
function vx (line 198) | function vx(a){a=a|0;return +(+mG(+g[a+112>>2]))}
function wx (line 198) | function wx(b,c){b=b|0;c=c|0;a[b+32>>0]=c&1;return}
function xx (line 198) | function xx(a){a=a|0;return QD(c[a+8>>2]|0)|0}
function yx (line 198) | function yx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return vb[a&63](b|0,c|0,d|0...
function zx (line 198) | function zx(a,b){a=a|0;b=b|0;return +(+Wn(a,b))}
function Ax (line 198) | function Ax(a,b){a=a|0;b=b|0;fi(a,b,1);return}
function Bx (line 198) | function Bx(a,b){a=a|0;b=b|0;OA(a,b);return}
function Cx (line 198) | function Cx(a){a=a|0;if(!a)a=0;else a=(Pi(a,2816)|0)!=0;return a&1|0}
function Dx (line 198) | function Dx(a){a=a|0;qj(a);YG(a);return}
function Ex (line 198) | function Ex(a,b){a=a|0;b=b|0;dm(a,b);return}
function Fx (line 198) | function Fx(a,b){a=a|0;b=+b;g[a+116>>2]=b;return}
function Gx (line 198) | function Gx(a,b){a=a|0;b=b|0;Fz(a,b,+HC(b));return}
function Hx (line 198) | function Hx(a){a=a|0;c[a>>2]=3768;yi(a+12|0);return}
function Ix (line 198) | function Ix(a,b){a=a|0;b=b|0;iB(a,b);return}
function Jx (line 198) | function Jx(a,b){a=a|0;b=b|0;at(a,b);return}
function Kx (line 198) | function Kx(){var a=0;a=Br(100)|0;gm(a);return a|0}
function Lx (line 198) | function Lx(a,b){a=a|0;b=+b;g[a+112>>2]=b;return}
function Mx (line 198) | function Mx(a,b){a=a|0;b=+b;g[a+124>>2]=b;return}
function Nx (line 198) | function Nx(a,b){a=a|0;b=b|0;WA(a,b);return}
function Ox (line 198) | function Ox(a,b){a=a|0;b=b|0;return c[(c[a+220>>2]|0)+(b<<2)>>2]|0}
function Px (line 198) | function Px(b,c){b=b|0;c=+c;g[b+572>>2]=c;a[b+553>>0]=0;return}
function Qx (line 198) | function Qx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Hb[a&15](b|0,c|0,d|0)}
function Rx (line 198) | function Rx(a,b){a=a|0;b=b|0;XA(a,b);return}
function Sx (line 198) | function Sx(a,b){a=a|0;b=b|0;return $b(a,b,8192)|0}
function Tx (line 198) | function Tx(b,c){b=b|0;c=c|0;a[b+120>>0]=c&1;return}
function Ux (line 198) | function Ux(){var a=0;a=Br(12)|0;kx(a);return a|0}
function Vx (line 198) | function Vx(a){a=a|0;if(!a)return;ts(a);YG(a);return}
function Wx (line 198) | function Wx(a){a=a|0;return lb[c[(c[a>>2]|0)+48>>2]&127](a)|0}
function Xx (line 198) | function Xx(a){a=a|0;ex(a);c[a>>2]=2856;return}
function Yx (line 198) | function Yx(a){a=a|0;return zE(a)|0}
function Zx (line 198) | function Zx(a,b){a=a|0;b=+b;Dv(a,b);return}
function _x (line 198) | function _x(a,b){a=a|0;b=b|0;return +(+jf(a,b))}
function $x (line 198) | function $x(a){a=a|0;return +(+mG(+g[a+120>>2]))}
function ay (line 198) | function ay(){var a=0;a=Br(4)|0;kA(a);return a|0}
function by (line 198) | function by(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}
function cy (line 198) | function cy(a,b){a=a|0;b=+b;TB(a,b);return}
function dy (line 198) | function dy(a,b){a=a|0;b=b|0;eh(a,b);return}
function ey (line 198) | function ey(a,b){a=a|0;b=+b;RB(a,b);return}
function fy (line 198) | function fy(a,b){a=a|0;b=b|0;return qu(a,b)|0}
function gy (line 198) | function gy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return yb[a&7](b|0,c|0,+d)|0}
function hy (line 198) | function hy(a){a=a|0;return +(+g[a+132>>2])}
function iy (line 198) | function iy(a){a=a|0;return Iy(c[a+68>>2]|0)|0}
function jy (line 198) | function jy(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}
function ky (line 198) | function ky(b,c){b=b|0;c=c|0;a[b+80>>0]=c&1;return}
function ly (line 198) | function ly(a,b){a=a|0;b=b|0;mB(a,b);return}
function my (line 198) | function my(a){a=a|0;return +(+g[a+128>>2])}
function ny (line 198) | function ny(a,b){a=a|0;b=b|0;return (c[a+144>>2]|0)+(b*284|0)|0}
function oy (line 198) | function oy(a,b){a=a|0;b=b|0;sB(a,b);return}
function py (line 198) | function py(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;S(24)}
function qy (line 198) | function qy(a){a=a|0;return QB(a)|0}
function ry (line 198) | function ry(a){a=a|0;qv(a);return}
function sy (line 198) | function sy(a,b){a=a|0;b=+b;g[a+196>>2]=+js(b);return}
function ty (line 198) | function ty(a,b){a=a|0;b=+b;g[a+192>>2]=+js(b);return}
function uy (line 198) | function uy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Rb[a&127](b|0,c|0,d|0)}
function vy (line 198) | function vy(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))hk(b,d,a);return}
function wy (line 198) | function wy(a,b){a=a|0;b=b|0;zq(a+92|0,b);return}
function xy (line 198) | function xy(a){a=a|0;mj(a);YG(a);return}
function yy (line 198) | function yy(a,b){a=a|0;b=+b;g[a+268>>2]=b;return}
function zy (line 198) | function zy(a){a=a|0;return +(+mG(+g[a+80>>2]))}
function Ay (line 198) | function Ay(a,b){a=a|0;b=b|0;c[b+748>>2]=0;return}
function By (line 198) | function By(a,b){a=a|0;b=b|0;gk(a,b);return}
function Cy (line 198) | function Cy(a){a=a|0;return bF(a)|0}
function Dy (line 198) | function Dy(a,b){a=a|0;b=+b;Qv(a,b);return}
function Ey (line 198) | function Ey(a,b){a=a|0;b=+b;g[a+96>>2]=b;return}
function Fy (line 198) | function Fy(a){a=a|0;return +(+zb[c[(c[a>>2]|0)+48>>2]&15](a))}
function Gy (line 198) | function Gy(a,c){a=a|0;c=c|0;b[a+10>>1]=c;return}
function Hy (line 198) | function Hy(a,c){a=a|0;c=c|0;b[a+8>>1]=c;return}
function Iy (line 198) | function Iy(a){a=a|0;return lb[c[(c[a>>2]|0)+36>>2]&127](a)|0}
function Jy (line 198) | function Jy(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}
function Ky (line 198) | function Ky(a,b){a=a|0;b=b|0;wd(a,b);return}
function Ly (line 198) | function Ly(a,b){a=a|0;b=b|0;SB(a,b);return}
function My (line 198) | function My(a,b){a=a|0;b=+b;g[a+92>>2]=b;return}
function Ny (line 198) | function Ny(a){a=a|0;return +(+g[a+136>>2])}
function Oy (line 198) | function Oy(b){b=b|0;return (a[b+32>>0]&1)!=0|0}
function Py (line 198) | function Py(b,c){b=b|0;c=c|0;a[b+170>>0]=c&1;return}
function Qy (line 198) | function Qy(a,b){a=a|0;b=b|0;tr(a,b);return}
function Ry (line 198) | function Ry(a,b){a=a|0;b=b|0;jn(a+288|0,b);return}
function Sy (line 198) | function Sy(a,b){a=a|0;b=b|0;return mw(b)|0}
function Ty (line 198) | function Ty(a,b){a=a|0;b=+b;g[a+108>>2]=b;return}
function Uy (line 198) | function Uy(a,c){a=a|0;c=c|0;b[a+12>>1]=c;return}
function Vy (line 198) | function Vy(a,b){a=a|0;b=b|0;eh(b,a);return}
function Wy (line 198) | function Wy(a,b){a=a|0;b=+b;g[a+272>>2]=b;return}
function Xy (line 198) | function Xy(a){a=a|0;return eF(a)|0}
function Yy (line 198) | function Yy(a){a=a|0;return fF(a)|0}
function Zy (line 198) | function Zy(a){a=a|0;return iF(a)|0}
function _y (line 198) | function _y(a,c){a=a|0;c=c|0;b[a+14>>1]=c;return}
function $y (line 198) | function $y(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(21);retur...
function az (line 198) | function az(a,b){a=a|0;b=b|0;By(a,b);return}
function bz (line 198) | function bz(a,b){a=a|0;b=b|0;return fx(b)|0}
function cz (line 198) | function cz(a,b){a=a|0;b=b|0;c[a+44>>2]=b&1;return}
function dz (line 198) | function dz(a,b,c){a=+a;b=+b
Condensed preview — 30 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,116K chars).
[
{
"path": "DEVELOPMENT.md",
"chars": 5949,
"preview": "### How to specify calibration parameters for RealSense cameras\n\nAfter exploring possibility to implement JavaScript API"
},
{
"path": "LICENSE.md",
"chars": 1564,
"preview": "# License\n\nEverything in this repo is BSD style license unless otherwise specified.\n\nCopyright (c) 2016 Intel Corporatio"
},
{
"path": "README.md",
"chars": 4400,
"preview": "DISCONTINUATION OF PROJECT\n\nThis project will no longer be maintained by Intel.\n\nIntel has ceased development and contri"
},
{
"path": "depth-camera.js",
"chars": 23501,
"preview": "/*jshint esversion: 6 */\n\n// Copyright 2017 Intel Corporation.\n//\n// Licensed under the Apache License, Version 2.0 (the"
},
{
"path": "depth-to-color-sync-render.js",
"chars": 34927,
"preview": "/*jshint esversion: 6 */\n/*\n * Copyright (c) 2018, Intel Corporation\n *\n * Redistribution and use in source and binary f"
},
{
"path": "depthdemo.html",
"chars": 16696,
"preview": "<html>\n<head>\n</head>\n\n<style>\n body {\n display: flex;\n flex-direction: column;\n font-family: 'Roboto', 'Noto'"
},
{
"path": "gesture/depth_and_segments.js",
"chars": 168584,
"preview": "/*jshint esversion: 6 */\r\n\r\n// Copyright 2017 Intel Corporation.\r\n//\r\n// Licensed under the Apache License, Version 2.0 "
},
{
"path": "gesture/index.html",
"chars": 52795,
"preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <title>Depth Capture Based Hand Interaction Demo</title>\r\n <script src=\"../libs/ammo"
},
{
"path": "gesture/indexaframe.html",
"chars": 54023,
"preview": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <title>Depth Capture Based Hand Interaction Demo</title>\r\n <script src=\"../libs/ammo"
},
{
"path": "index.html",
"chars": 2395,
"preview": "<style>\n body {\n font-family: 'Roboto', 'Noto', sans-serif;\n line-height: 1.5;\n background-color: #fbfbfb;\n "
},
{
"path": "libs/aframe/LICENSE.txt",
"chars": 1080,
"preview": "The MIT License\n\nCopyright © 2015-2017 A-Frame authors.\n\nPermission is hereby granted, free of charge, to any person obt"
},
{
"path": "libs/aframe/aframe-v0.7.1.js",
"chars": 2169878,
"preview": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"func"
},
{
"path": "libs/ammo.js/LICENSE",
"chars": 925,
"preview": "Copyright (c) 2011 ammo.js contributors\r\n\r\nThis software is provided 'as-is', without any express or implied\r\nwarranty. "
},
{
"path": "libs/ammo.js/ammo.js",
"chars": 1628850,
"preview": "\n// This is ammo.js, a port of Bullet Physics to JavaScript. zlib licensed.\nvar Ammo = function(Ammo) {\n Ammo = Ammo ||"
},
{
"path": "libs/gl-matrix.js",
"chars": 195370,
"preview": "/**\r\n * @fileoverview gl-matrix - High performance matrix and vector operations\r\n * @author Brandon Jones\r\n * @author Co"
},
{
"path": "libs/picogl.js/picogl.js",
"chars": 147532,
"preview": "/*\r\nPicoGL.js v0.6.10\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2017 Tarek Sherif\r\n\r\nPermission is hereby granted, free "
},
{
"path": "libs/picogl.js/utils.js",
"chars": 24728,
"preview": "///////////////////////////////////////////////////////////////////////////////////\r\n// The MIT License (MIT)\r\n//\r\n// Co"
},
{
"path": "nn/using-deeplab/README.md",
"chars": 6884,
"preview": "## DeepLabV3+ segmentation in TensorFlow.js\n\nIn the [previous work](https://01.org/blogs/astojilj/2018/background-remova"
},
{
"path": "nn/using-deeplab/argmax257_2/LICENSE",
"chars": 11405,
"preview": "Copyright 2016 The TensorFlow Authors. All rights reserved.\n\n Apache License\n "
},
{
"path": "nn/using-deeplab/argmax257_2/weights_manifest.json",
"chars": 13862,
"preview": "[{\"paths\": [\"group1-shard1of2\", \"group1-shard2of2\"], \"weights\": [{\"name\": \"image_pooling/weights/read/_271__cf__271\", \"s"
},
{
"path": "nn/using-deeplab/index.html",
"chars": 10214,
"preview": "<html>\n <head>\n <body onload=\"onLoad()\">\n <div id=\"container\">\n <div class=\"ctrl\" id=\"use-packed\">Use pa"
},
{
"path": "nn/using-deeplab/tfjs/LICENSE",
"chars": 11405,
"preview": "Copyright 2016 The TensorFlow Authors. All rights reserved.\n\n Apache License\n "
},
{
"path": "nn/using-deeplab/tfjs/tf-core.js",
"chars": 1049455,
"preview": "/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "tools/generate_concentric_circles_indices.js",
"chars": 3939,
"preview": "/*jshint esversion: 6 */\n\n\nfunction generateAllArrays() {\n var xs = [];\n var ys = [];\n var towards_center = [];\n var"
},
{
"path": "typing_in_the_air/doc/tutorial.html",
"chars": 21803,
"preview": "<html><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\"><style type=\"text/css\">@import url('https"
},
{
"path": "typing_in_the_air/front_capture_typing.html",
"chars": 14260,
"preview": "<html>\n<head>\n</head>\n<style>\n.canvasgroup {\n position: relative;\n width: 685px;\n}\n.canvasgroup canvas {\n position: a"
},
{
"path": "typing_in_the_air/front_capture_typing.js",
"chars": 144198,
"preview": "/*jshint esversion: 6 */\n\nvar depth_x = 640;\nvar depth_y = 480;\nvar plane = 0.042; // On SR300 around 35 cm\n\n// Creates "
}
]
// ... and 3 more files (download for full content)
About this extraction
This page contains the full source code of the intel/depth-camera-web-demo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 30 files (5.6 MB), approximately 1.5M tokens, and a symbol index with 3475 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.