Skip to content

Instantly share code, notes, and snippets.

@ramnathv
Last active January 1, 2016 09:19
Show Gist options
  • Save ramnathv/8124307 to your computer and use it in GitHub Desktop.
Save ramnathv/8124307 to your computer and use it in GitHub Desktop.
RGL in Slidify
CanvasMatrix4=function(m){if(typeof m=='object'){if("length"in m&&m.length>=16){this.load(m[0],m[1],m[2],m[3],m[4],m[5],m[6],m[7],m[8],m[9],m[10],m[11],m[12],m[13],m[14],m[15]);return}else if(m instanceof CanvasMatrix4){this.load(m);return}}this.makeIdentity()};CanvasMatrix4.prototype.load=function(){if(arguments.length==1&&typeof arguments[0]=='object'){var matrix=arguments[0];if("length"in matrix&&matrix.length==16){this.m11=matrix[0];this.m12=matrix[1];this.m13=matrix[2];this.m14=matrix[3];this.m21=matrix[4];this.m22=matrix[5];this.m23=matrix[6];this.m24=matrix[7];this.m31=matrix[8];this.m32=matrix[9];this.m33=matrix[10];this.m34=matrix[11];this.m41=matrix[12];this.m42=matrix[13];this.m43=matrix[14];this.m44=matrix[15];return}if(arguments[0]instanceof CanvasMatrix4){this.m11=matrix.m11;this.m12=matrix.m12;this.m13=matrix.m13;this.m14=matrix.m14;this.m21=matrix.m21;this.m22=matrix.m22;this.m23=matrix.m23;this.m24=matrix.m24;this.m31=matrix.m31;this.m32=matrix.m32;this.m33=matrix.m33;this.m34=matrix.m34;this.m41=matrix.m41;this.m42=matrix.m42;this.m43=matrix.m43;this.m44=matrix.m44;return}}this.makeIdentity()};CanvasMatrix4.prototype.getAsArray=function(){return[this.m11,this.m12,this.m13,this.m14,this.m21,this.m22,this.m23,this.m24,this.m31,this.m32,this.m33,this.m34,this.m41,this.m42,this.m43,this.m44]};CanvasMatrix4.prototype.getAsWebGLFloatArray=function(){return new WebGLFloatArray(this.getAsArray())};CanvasMatrix4.prototype.makeIdentity=function(){this.m11=1;this.m12=0;this.m13=0;this.m14=0;this.m21=0;this.m22=1;this.m23=0;this.m24=0;this.m31=0;this.m32=0;this.m33=1;this.m34=0;this.m41=0;this.m42=0;this.m43=0;this.m44=1};CanvasMatrix4.prototype.transpose=function(){var tmp=this.m12;this.m12=this.m21;this.m21=tmp;tmp=this.m13;this.m13=this.m31;this.m31=tmp;tmp=this.m14;this.m14=this.m41;this.m41=tmp;tmp=this.m23;this.m23=this.m32;this.m32=tmp;tmp=this.m24;this.m24=this.m42;this.m42=tmp;tmp=this.m34;this.m34=this.m43;this.m43=tmp};CanvasMatrix4.prototype.invert=function(){var det=this._determinant4x4();if(Math.abs(det)<1e-8)return null;this._makeAdjoint();this.m11/=det;this.m12/=det;this.m13/=det;this.m14/=det;this.m21/=det;this.m22/=det;this.m23/=det;this.m24/=det;this.m31/=det;this.m32/=det;this.m33/=det;this.m34/=det;this.m41/=det;this.m42/=det;this.m43/=det;this.m44/=det};CanvasMatrix4.prototype.translate=function(x,y,z){if(x==undefined)x=0;if(y==undefined)y=0;if(z==undefined)z=0;var matrix=new CanvasMatrix4();matrix.m41=x;matrix.m42=y;matrix.m43=z;this.multRight(matrix)};CanvasMatrix4.prototype.scale=function(x,y,z){if(x==undefined)x=1;if(z==undefined){if(y==undefined){y=x;z=x}else z=1}else if(y==undefined)y=x;var matrix=new CanvasMatrix4();matrix.m11=x;matrix.m22=y;matrix.m33=z;this.multRight(matrix)};CanvasMatrix4.prototype.rotate=function(angle,x,y,z){angle=angle/180*Math.PI;angle/=2;var sinA=Math.sin(angle);var cosA=Math.cos(angle);var sinA2=sinA*sinA;var length=Math.sqrt(x*x+y*y+z*z);if(length==0){x=0;y=0;z=1}else if(length!=1){x/=length;y/=length;z/=length}var mat=new CanvasMatrix4();if(x==1&&y==0&&z==0){mat.m11=1;mat.m12=0;mat.m13=0;mat.m21=0;mat.m22=1-2*sinA2;mat.m23=2*sinA*cosA;mat.m31=0;mat.m32=-2*sinA*cosA;mat.m33=1-2*sinA2;mat.m14=mat.m24=mat.m34=0;mat.m41=mat.m42=mat.m43=0;mat.m44=1}else if(x==0&&y==1&&z==0){mat.m11=1-2*sinA2;mat.m12=0;mat.m13=-2*sinA*cosA;mat.m21=0;mat.m22=1;mat.m23=0;mat.m31=2*sinA*cosA;mat.m32=0;mat.m33=1-2*sinA2;mat.m14=mat.m24=mat.m34=0;mat.m41=mat.m42=mat.m43=0;mat.m44=1}else if(x==0&&y==0&&z==1){mat.m11=1-2*sinA2;mat.m12=2*sinA*cosA;mat.m13=0;mat.m21=-2*sinA*cosA;mat.m22=1-2*sinA2;mat.m23=0;mat.m31=0;mat.m32=0;mat.m33=1;mat.m14=mat.m24=mat.m34=0;mat.m41=mat.m42=mat.m43=0;mat.m44=1}else{var x2=x*x;var y2=y*y;var z2=z*z;mat.m11=1-2*(y2+z2)*sinA2;mat.m12=2*(x*y*sinA2+z*sinA*cosA);mat.m13=2*(x*z*sinA2-y*sinA*cosA);mat.m21=2*(y*x*sinA2-z*sinA*cosA);mat.m22=1-2*(z2+x2)*sinA2;mat.m23=2*(y*z*sinA2+x*sinA*cosA);mat.m31=2*(z*x*sinA2+y*sinA*cosA);mat.m32=2*(z*y*sinA2-x*sinA*cosA);mat.m33=1-2*(x2+y2)*sinA2;mat.m14=mat.m24=mat.m34=0;mat.m41=mat.m42=mat.m43=0;mat.m44=1}this.multRight(mat)};CanvasMatrix4.prototype.multRight=function(mat){var m11=(this.m11*mat.m11+this.m12*mat.m21+this.m13*mat.m31+this.m14*mat.m41);var m12=(this.m11*mat.m12+this.m12*mat.m22+this.m13*mat.m32+this.m14*mat.m42);var m13=(this.m11*mat.m13+this.m12*mat.m23+this.m13*mat.m33+this.m14*mat.m43);var m14=(this.m11*mat.m14+this.m12*mat.m24+this.m13*mat.m34+this.m14*mat.m44);var m21=(this.m21*mat.m11+this.m22*mat.m21+this.m23*mat.m31+this.m24*mat.m41);var m22=(this.m21*mat.m12+this.m22*mat.m22+this.m23*mat.m32+this.m24*mat.m42);var m23=(this.m21*mat.m13+this.m22*mat.m23+this.m23*mat.m33+this.m24*mat.m43);var m24=(this.m21*mat.m14+this.m22*mat.m24+this.m23*mat.m34+this.m24*mat.m44);var m31=(this.m31*mat.m11+this.m32*mat.m21+this.m33*mat.m31+this.m34*mat.m41);var m32=(this.m31*mat.m12+this.m32*mat.m22+this.m33*mat.m32+this.m34*mat.m42);var m33=(this.m31*mat.m13+this.m32*mat.m23+this.m33*mat.m33+this.m34*mat.m43);var m34=(this.m31*mat.m14+this.m32*mat.m24+this.m33*mat.m34+this.m34*mat.m44);var m41=(this.m41*mat.m11+this.m42*mat.m21+this.m43*mat.m31+this.m44*mat.m41);var m42=(this.m41*mat.m12+this.m42*mat.m22+this.m43*mat.m32+this.m44*mat.m42);var m43=(this.m41*mat.m13+this.m42*mat.m23+this.m43*mat.m33+this.m44*mat.m43);var m44=(this.m41*mat.m14+this.m42*mat.m24+this.m43*mat.m34+this.m44*mat.m44);this.m11=m11;this.m12=m12;this.m13=m13;this.m14=m14;this.m21=m21;this.m22=m22;this.m23=m23;this.m24=m24;this.m31=m31;this.m32=m32;this.m33=m33;this.m34=m34;this.m41=m41;this.m42=m42;this.m43=m43;this.m44=m44};CanvasMatrix4.prototype.multLeft=function(mat){var m11=(mat.m11*this.m11+mat.m12*this.m21+mat.m13*this.m31+mat.m14*this.m41);var m12=(mat.m11*this.m12+mat.m12*this.m22+mat.m13*this.m32+mat.m14*this.m42);var m13=(mat.m11*this.m13+mat.m12*this.m23+mat.m13*this.m33+mat.m14*this.m43);var m14=(mat.m11*this.m14+mat.m12*this.m24+mat.m13*this.m34+mat.m14*this.m44);var m21=(mat.m21*this.m11+mat.m22*this.m21+mat.m23*this.m31+mat.m24*this.m41);var m22=(mat.m21*this.m12+mat.m22*this.m22+mat.m23*this.m32+mat.m24*this.m42);var m23=(mat.m21*this.m13+mat.m22*this.m23+mat.m23*this.m33+mat.m24*this.m43);var m24=(mat.m21*this.m14+mat.m22*this.m24+mat.m23*this.m34+mat.m24*this.m44);var m31=(mat.m31*this.m11+mat.m32*this.m21+mat.m33*this.m31+mat.m34*this.m41);var m32=(mat.m31*this.m12+mat.m32*this.m22+mat.m33*this.m32+mat.m34*this.m42);var m33=(mat.m31*this.m13+mat.m32*this.m23+mat.m33*this.m33+mat.m34*this.m43);var m34=(mat.m31*this.m14+mat.m32*this.m24+mat.m33*this.m34+mat.m34*this.m44);var m41=(mat.m41*this.m11+mat.m42*this.m21+mat.m43*this.m31+mat.m44*this.m41);var m42=(mat.m41*this.m12+mat.m42*this.m22+mat.m43*this.m32+mat.m44*this.m42);var m43=(mat.m41*this.m13+mat.m42*this.m23+mat.m43*this.m33+mat.m44*this.m43);var m44=(mat.m41*this.m14+mat.m42*this.m24+mat.m43*this.m34+mat.m44*this.m44);this.m11=m11;this.m12=m12;this.m13=m13;this.m14=m14;this.m21=m21;this.m22=m22;this.m23=m23;this.m24=m24;this.m31=m31;this.m32=m32;this.m33=m33;this.m34=m34;this.m41=m41;this.m42=m42;this.m43=m43;this.m44=m44};CanvasMatrix4.prototype.ortho=function(left,right,bottom,top,near,far){var tx=(left+right)/(left-right);var ty=(top+bottom)/(top-bottom);var tz=(far+near)/(far-near);var matrix=new CanvasMatrix4();matrix.m11=2/(left-right);matrix.m12=0;matrix.m13=0;matrix.m14=0;matrix.m21=0;matrix.m22=2/(top-bottom);matrix.m23=0;matrix.m24=0;matrix.m31=0;matrix.m32=0;matrix.m33=-2/(far-near);matrix.m34=0;matrix.m41=tx;matrix.m42=ty;matrix.m43=tz;matrix.m44=1;this.multRight(matrix)};CanvasMatrix4.prototype.frustum=function(left,right,bottom,top,near,far){var matrix=new CanvasMatrix4();var A=(right+left)/(right-left);var B=(top+bottom)/(top-bottom);var C=-(far+near)/(far-near);var D=-(2*far*near)/(far-near);matrix.m11=(2*near)/(right-left);matrix.m12=0;matrix.m13=0;matrix.m14=0;matrix.m21=0;matrix.m22=2*near/(top-bottom);matrix.m23=0;matrix.m24=0;matrix.m31=A;matrix.m32=B;matrix.m33=C;matrix.m34=-1;matrix.m41=0;matrix.m42=0;matrix.m43=D;matrix.m44=0;this.multRight(matrix)};CanvasMatrix4.prototype.perspective=function(fovy,aspect,zNear,zFar){var top=Math.tan(fovy*Math.PI/360)*zNear;var bottom=-top;var left=aspect*bottom;var right=aspect*top;this.frustum(left,right,bottom,top,zNear,zFar)};CanvasMatrix4.prototype.lookat=function(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz){var matrix=new CanvasMatrix4();var zx=eyex-centerx;var zy=eyey-centery;var zz=eyez-centerz;var mag=Math.sqrt(zx*zx+zy*zy+zz*zz);if(mag){zx/=mag;zy/=mag;zz/=mag}var yx=upx;var yy=upy;var yz=upz;xx=yy*zz-yz*zy;xy=-yx*zz+yz*zx;xz=yx*zy-yy*zx;yx=zy*xz-zz*xy;yy=-zx*xz+zz*xx;yx=zx*xy-zy*xx;mag=Math.sqrt(xx*xx+xy*xy+xz*xz);if(mag){xx/=mag;xy/=mag;xz/=mag}mag=Math.sqrt(yx*yx+yy*yy+yz*yz);if(mag){yx/=mag;yy/=mag;yz/=mag}matrix.m11=xx;matrix.m12=xy;matrix.m13=xz;matrix.m14=0;matrix.m21=yx;matrix.m22=yy;matrix.m23=yz;matrix.m24=0;matrix.m31=zx;matrix.m32=zy;matrix.m33=zz;matrix.m34=0;matrix.m41=0;matrix.m42=0;matrix.m43=0;matrix.m44=1;matrix.translate(-eyex,-eyey,-eyez);this.multRight(matrix)};CanvasMatrix4.prototype._determinant2x2=function(a,b,c,d){return a*d-b*c};CanvasMatrix4.prototype._determinant3x3=function(a1,a2,a3,b1,b2,b3,c1,c2,c3){return a1*this._determinant2x2(b2,b3,c2,c3)-b1*this._determinant2x2(a2,a3,c2,c3)+c1*this._determinant2x2(a2,a3,b2,b3)};CanvasMatrix4.prototype._determinant4x4=function(){var a1=this.m11;var b1=this.m12;var c1=this.m13;var d1=this.m14;var a2=this.m21;var b2=this.m22;var c2=this.m23;var d2=this.m24;var a3=this.m31;var b3=this.m32;var c3=this.m33;var d3=this.m34;var a4=this.m41;var b4=this.m42;var c4=this.m43;var d4=this.m44;return a1*this._determinant3x3(b2,b3,b4,c2,c3,c4,d2,d3,d4)-b1*this._determinant3x3(a2,a3,a4,c2,c3,c4,d2,d3,d4)+c1*this._determinant3x3(a2,a3,a4,b2,b3,b4,d2,d3,d4)-d1*this._determinant3x3(a2,a3,a4,b2,b3,b4,c2,c3,c4)};CanvasMatrix4.prototype._makeAdjoint=function(){var a1=this.m11;var b1=this.m12;var c1=this.m13;var d1=this.m14;var a2=this.m21;var b2=this.m22;var c2=this.m23;var d2=this.m24;var a3=this.m31;var b3=this.m32;var c3=this.m33;var d3=this.m34;var a4=this.m41;var b4=this.m42;var c4=this.m43;var d4=this.m44;this.m11=this._determinant3x3(b2,b3,b4,c2,c3,c4,d2,d3,d4);this.m21=-this._determinant3x3(a2,a3,a4,c2,c3,c4,d2,d3,d4);this.m31=this._determinant3x3(a2,a3,a4,b2,b3,b4,d2,d3,d4);this.m41=-this._determinant3x3(a2,a3,a4,b2,b3,b4,c2,c3,c4);this.m12=-this._determinant3x3(b1,b3,b4,c1,c3,c4,d1,d3,d4);this.m22=this._determinant3x3(a1,a3,a4,c1,c3,c4,d1,d3,d4);this.m32=-this._determinant3x3(a1,a3,a4,b1,b3,b4,d1,d3,d4);this.m42=this._determinant3x3(a1,a3,a4,b1,b3,b4,c1,c3,c4);this.m13=this._determinant3x3(b1,b2,b4,c1,c2,c4,d1,d2,d4);this.m23=-this._determinant3x3(a1,a2,a4,c1,c2,c4,d1,d2,d4);this.m33=this._determinant3x3(a1,a2,a4,b1,b2,b4,d1,d2,d4);this.m43=-this._determinant3x3(a1,a2,a4,b1,b2,b4,c1,c2,c4);this.m14=-this._determinant3x3(b1,b2,b3,c1,c2,c3,d1,d2,d3);this.m24=this._determinant3x3(a1,a2,a3,c1,c2,c3,d1,d2,d3);this.m34=-this._determinant3x3(a1,a2,a3,b1,b2,b3,d1,d2,d3);this.m44=this._determinant3x3(a1,a2,a3,b1,b2,b3,c1,c2,c3)}
<!DOCTYPE html>
<html>
<head>
<title>RGL in Slidify</title>
<meta charset="utf-8">
<meta name="description" content="RGL in Slidify">
<meta name="author" content="">
<meta name="generator" content="slidify" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<link rel="stylesheet" href="http://slidifylibraries2.googlecode.com/git/inst/libraries/frameworks/io2012/css/default.css" media="all" >
<link rel="stylesheet" href="http://slidifylibraries2.googlecode.com/git/inst/libraries/frameworks/io2012/css/phone.css"
media="only screen and (max-device-width: 480px)" >
<link rel="stylesheet" href="http://slidifylibraries2.googlecode.com/git/inst/libraries/frameworks/io2012/css/slidify.css" >
<link rel="stylesheet" href="http://slidifylibraries2.googlecode.com/git/inst/libraries/highlighters/highlight.js/css/tomorrow.css" />
<base target="_blank"> <!-- This amazingness opens all links in a new tab. -->
<!-- Grab CDN jQuery, fall back to local if offline -->
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js"></script>
<script>window.jQuery || document.write('<script src="http://slidifylibraries2.googlecode.com/git/inst/libraries/widgets/quiz/js/jquery.js"><\/script>')</script>
<script data-main="http://slidifylibraries2.googlecode.com/git/inst/libraries/frameworks/io2012/js/slides"
src="http://slidifylibraries2.googlecode.com/git/inst/libraries/frameworks/io2012/js/require-1.0.8.min.js">
</script>
</head>
<body style="opacity: 0">
<slides class="layout-widescreen">
<!-- LOGO SLIDE -->
<slide class="title-slide segue nobackground">
<hgroup class="auto-fadein">
<h1>RGL in Slidify</h1>
<h2></h2>
<p><br/></p>
</hgroup>
<article></article>
</slide>
<!-- SLIDES -->
<slide class="" id="slide-1" style="background:;">
<article data-timings="">
<pre><code class="r">knit_hooks$set(webgl = hook_webgl)
</code></pre>
<pre><code class="r">x &lt;- sort(rnorm(1000))
y &lt;- rnorm(1000)
z &lt;- rnorm(1000) + atan2(x, y)
plot3d(x, y, z, col = rainbow(1000))
</code></pre>
<script src="CanvasMatrix.js" type="text/javascript"></script>
<p><canvas id="testgltextureCanvas" style="display: none;" width="256" height="256">
<img src="data:image/png;base64,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9AAAkHAgegAASDgQPQAAJByIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICEA9EDAEDCgegBACDhQPQAAJBwIHoAAEg4ED0AACQciB4AABIORA8AAAkHogcAgIQD0QMAQMKB6AEAIOFA9AAAkHAgegAASDgQPQAAJByIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICEA9EDAEDCgegBACDhQPQAAJBwIHoAAEg4ED2oCt59993Jkyd/8skn8un27dsffvjhtWvXxntUAEQDRA+qgpaWlsMOO+zqq6+WTy+++OKjjjpKeR+AZAPRg2rhpZde6tSp0+LFi1955ZXOnTu/9dZbcR8RABEB0YMqglXk+/bte/jhh0+cODHuYwEgOiB6UEXs2LHjwAMPrK+vb29vj/tYAIgOiB5UEc8991yXLl1qa2vnz58f97EAEB0QPagWtm7desghh9x9990XXnjhkUce2dbWFvcRARARED2oFs4666wTTjihvb1927Ztn/70p0ePHh33EQEQERA9qAomT57cpUuXFStWyKd//OMf0YADqgeIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICEA9EDAEDCgegBACDhQPQAAJBwIHoAAEg4ED0AACQciB4AABIORA8AAAkHogcAgIQD0QMAQMKB6AEAIOFA9AAAkHAgegAASDgQPQAAJByIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICE8/8BVlSoe98zAm0AAAAASUVORK5CYII=" alt="testglsnapshot" width=505/><br>
Your browser does not support the HTML5 canvas element.</canvas></p>
<!-- ****** points object 6 ****** -->
<script id="testglvshader6" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
void main(void) {
vPosition = mvMatrix * vec4(aPos, 1.);
gl_Position = prMatrix * vPosition;
gl_PointSize = 3.;
vCol = aCol;
}
</script>
<script id="testglfshader6" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
gl_FragColor = lighteffect;
}
</script>
<!-- ****** text object 8 ****** -->
<script id="testglvshader8" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
attribute vec2 aOfs;
void main(void) {
vCol = aCol;
vTexcoord = aTexcoord;
vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);
pos = pos/pos.w;
gl_Position = pos + vec4(aOfs, 0.,0.);
}
</script>
<script id="testglfshader8" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
varying vec2 vTexcoord;
uniform sampler2D uSampler;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord);
if (textureColor.a < 0.1)
discard;
else
gl_FragColor = textureColor;
}
</script>
<!-- ****** text object 9 ****** -->
<script id="testglvshader9" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
attribute vec2 aOfs;
void main(void) {
vCol = aCol;
vTexcoord = aTexcoord;
vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);
pos = pos/pos.w;
gl_Position = pos + vec4(aOfs, 0.,0.);
}
</script>
<script id="testglfshader9" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
varying vec2 vTexcoord;
uniform sampler2D uSampler;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord);
if (textureColor.a < 0.1)
discard;
else
gl_FragColor = textureColor;
}
</script>
<!-- ****** text object 10 ****** -->
<script id="testglvshader10" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
attribute vec2 aOfs;
void main(void) {
vCol = aCol;
vTexcoord = aTexcoord;
vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);
pos = pos/pos.w;
gl_Position = pos + vec4(aOfs, 0.,0.);
}
</script>
<script id="testglfshader10" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
varying vec2 vTexcoord;
uniform sampler2D uSampler;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord);
if (textureColor.a < 0.1)
discard;
else
gl_FragColor = textureColor;
}
</script>
<!-- ****** lines object 11 ****** -->
<script id="testglvshader11" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
void main(void) {
vPosition = mvMatrix * vec4(aPos, 1.);
gl_Position = prMatrix * vPosition;
vCol = aCol;
}
</script>
<script id="testglfshader11" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
gl_FragColor = lighteffect;
}
</script>
<!-- ****** text object 12 ****** -->
<script id="testglvshader12" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
attribute vec2 aOfs;
void main(void) {
vCol = aCol;
vTexcoord = aTexcoord;
vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);
pos = pos/pos.w;
gl_Position = pos + vec4(aOfs, 0.,0.);
}
</script>
<script id="testglfshader12" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
varying vec2 vTexcoord;
uniform sampler2D uSampler;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord);
if (textureColor.a < 0.1)
discard;
else
gl_FragColor = textureColor;
}
</script>
<!-- ****** lines object 13 ****** -->
<script id="testglvshader13" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
void main(void) {
vPosition = mvMatrix * vec4(aPos, 1.);
gl_Position = prMatrix * vPosition;
vCol = aCol;
}
</script>
<script id="testglfshader13" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
gl_FragColor = lighteffect;
}
</script>
<!-- ****** text object 14 ****** -->
<script id="testglvshader14" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
attribute vec2 aOfs;
void main(void) {
vCol = aCol;
vTexcoord = aTexcoord;
vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);
pos = pos/pos.w;
gl_Position = pos + vec4(aOfs, 0.,0.);
}
</script>
<script id="testglfshader14" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
varying vec2 vTexcoord;
uniform sampler2D uSampler;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord);
if (textureColor.a < 0.1)
discard;
else
gl_FragColor = textureColor;
}
</script>
<!-- ****** lines object 15 ****** -->
<script id="testglvshader15" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
void main(void) {
vPosition = mvMatrix * vec4(aPos, 1.);
gl_Position = prMatrix * vPosition;
vCol = aCol;
}
</script>
<script id="testglfshader15" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
gl_FragColor = lighteffect;
}
</script>
<!-- ****** text object 16 ****** -->
<script id="testglvshader16" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
attribute vec2 aTexcoord;
varying vec2 vTexcoord;
attribute vec2 aOfs;
void main(void) {
vCol = aCol;
vTexcoord = aTexcoord;
vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.);
pos = pos/pos.w;
gl_Position = pos + vec4(aOfs, 0.,0.);
}
</script>
<script id="testglfshader16" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
varying vec2 vTexcoord;
uniform sampler2D uSampler;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord);
if (textureColor.a < 0.1)
discard;
else
gl_FragColor = textureColor;
}
</script>
<!-- ****** lines object 17 ****** -->
<script id="testglvshader17" type="x-shader/x-vertex">
attribute vec3 aPos;
attribute vec4 aCol;
uniform mat4 mvMatrix;
uniform mat4 prMatrix;
varying vec4 vCol;
varying vec4 vPosition;
void main(void) {
vPosition = mvMatrix * vec4(aPos, 1.);
gl_Position = prMatrix * vPosition;
vCol = aCol;
}
</script>
<script id="testglfshader17" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
varying vec4 vCol; // carries alpha
varying vec4 vPosition;
void main(void) {
vec4 colDiff = vCol;
vec4 lighteffect = colDiff;
gl_FragColor = lighteffect;
}
</script>
<script type="text/javascript">
function getShader ( gl, id ){
var shaderScript = document.getElementById ( id );
var str = "";
var k = shaderScript.firstChild;
while ( k ){
if ( k.nodeType == 3 ) str += k.textContent;
k = k.nextSibling;
}
var shader;
if ( shaderScript.type == "x-shader/x-fragment" )
shader = gl.createShader ( gl.FRAGMENT_SHADER );
else if ( shaderScript.type == "x-shader/x-vertex" )
shader = gl.createShader(gl.VERTEX_SHADER);
else return null;
gl.shaderSource(shader, str);
gl.compileShader(shader);
if (gl.getShaderParameter(shader, gl.COMPILE_STATUS) == 0)
alert(gl.getShaderInfoLog(shader));
return shader;
}
var min = Math.min;
var max = Math.max;
var sqrt = Math.sqrt;
var sin = Math.sin;
var acos = Math.acos;
var tan = Math.tan;
var SQRT2 = Math.SQRT2;
var PI = Math.PI;
var log = Math.log;
var exp = Math.exp;
function testglwebGLStart() {
var debug = function(msg) {
document.getElementById("testgldebug").innerHTML = msg;
}
debug("");
var canvas = document.getElementById("testglcanvas");
if (!window.WebGLRenderingContext){
debug("<img src=\"testglsnapshot.png\" alt=\"testglsnapshot\" width=505/><br> Your browser does not support WebGL. See <a href=\"http://get.webgl.org\">http://get.webgl.org</a>");
return;
}
var gl;
try {
// Try to grab the standard context. If it fails, fallback to experimental.
gl = canvas.getContext("webgl")
|| canvas.getContext("experimental-webgl");
}
catch(e) {}
if ( !gl ) {
debug("<img src=\"testglsnapshot.png\" alt=\"testglsnapshot\" width=505/><br> Your browser appears to support WebGL, but did not create a WebGL context. See <a href=\"http://get.webgl.org\">http://get.webgl.org</a>");
return;
}
var width = 505; var height = 505;
canvas.width = width; canvas.height = height;
gl.viewport(0, 0, width, height);
var prMatrix = new CanvasMatrix4();
var mvMatrix = new CanvasMatrix4();
var normMatrix = new CanvasMatrix4();
var saveMat = new CanvasMatrix4();
saveMat.makeIdentity();
var distance;
var posLoc = 0;
var colLoc = 1;
var zoom = 1;
var fov = 30;
var userMatrix = new CanvasMatrix4();
userMatrix.load([
1, 0, 0, 0,
0, 0.3420201, -0.9396926, 0,
0, 0.9396926, 0.3420201, 0,
0, 0, 0, 1
]);
function getPowerOfTwo(value) {
var pow = 1;
while(pow<value) {
pow *= 2;
}
return pow;
}
function handleLoadedTexture(texture, textureCanvas) {
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureCanvas);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
gl.generateMipmap(gl.TEXTURE_2D);
gl.bindTexture(gl.TEXTURE_2D, null);
}
function loadImageToTexture(filename, texture) {
var canvas = document.getElementById("testgltextureCanvas");
var ctx = canvas.getContext("2d");
var image = new Image();
image.onload = function() {
var w = image.width;
var h = image.height;
var canvasX = getPowerOfTwo(w);
var canvasY = getPowerOfTwo(h);
canvas.width = canvasX;
canvas.height = canvasY;
ctx.imageSmoothingEnabled = true;
ctx.drawImage(image, 0, 0, canvasX, canvasY);
handleLoadedTexture(texture, canvas);
drawScene();
}
image.src = filename;
}
function drawTextToCanvas(text, cex) {
var canvasX, canvasY;
var textX, textY;
var textHeight = 20 * cex;
var textColour = "white";
var fontFamily = "Arial";
var backgroundColour = "rgba(0,0,0,0)";
var canvas = document.getElementById("testgltextureCanvas");
var ctx = canvas.getContext("2d");
ctx.font = textHeight+"px "+fontFamily;
canvasX = 1;
var widths = [];
for (var i = 0; i < text.length; i++) {
widths[i] = ctx.measureText(text[i]).width;
canvasX = (widths[i] > canvasX) ? widths[i] : canvasX;
}
canvasX = getPowerOfTwo(canvasX);
var offset = 2*textHeight; // offset to first baseline
var skip = 2*textHeight; // skip between baselines
canvasY = getPowerOfTwo(offset + text.length*skip);
canvas.width = canvasX;
canvas.height = canvasY;
ctx.fillStyle = backgroundColour;
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.fillStyle = textColour;
ctx.textAlign = "left";
ctx.textBaseline = "alphabetic";
ctx.font = textHeight+"px "+fontFamily;
for(var i = 0; i < text.length; i++) {
textY = i*skip + offset;
ctx.fillText(text[i], 0, textY);
}
return {canvasX:canvasX, canvasY:canvasY,
widths:widths, textHeight:textHeight,
offset:offset, skip:skip};
}
// ****** points object 6 ******
var prog6 = gl.createProgram();
gl.attachShader(prog6, getShader( gl, "testglvshader6" ));
gl.attachShader(prog6, getShader( gl, "testglfshader6" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog6, 0, "aPos");
gl.bindAttribLocation(prog6, 1, "aCol");
gl.linkProgram(prog6);
var v=new Float32Array([
-2.952072, -0.2214677, -3.019845, 1, 0, 0, 1,
-2.941993, 0.424547, -1.694011, 1, 0.007843138, 0, 1,
-2.773294, -2.252316, -2.289618, 1, 0.01176471, 0, 1,
-2.741154, 1.91224, -1.81119, 1, 0.01960784, 0, 1,
-2.683521, -1.0161, -2.709061, 1, 0.02352941, 0, 1,
-2.586437, -0.1779812, -1.750773, 1, 0.03137255, 0, 1,
-2.505093, -0.8384189, -1.21044, 1, 0.03529412, 0, 1,
-2.47568, 1.022213, -0.1225114, 1, 0.04313726, 0, 1,
-2.449687, 0.390398, -1.7867, 1, 0.04705882, 0, 1,
-2.427354, 0.5113504, -1.675239, 1, 0.05490196, 0, 1,
-2.408303, 0.685719, -1.534938, 1, 0.05882353, 0, 1,
-2.333889, -1.363672, -3.014697, 1, 0.06666667, 0, 1,
-2.320272, 0.6390843, -2.03192, 1, 0.07058824, 0, 1,
-2.293797, -0.9728975, -0.8808585, 1, 0.07843138, 0, 1,
-2.290034, 0.9424326, -0.8609061, 1, 0.08235294, 0, 1,
-2.230262, -0.8640178, -2.784488, 1, 0.09019608, 0, 1,
-2.207447, -0.08595455, -1.174022, 1, 0.09411765, 0, 1,
-2.196868, 1.203467, -2.14733, 1, 0.1019608, 0, 1,
-2.194682, 0.4785337, -1.757936, 1, 0.1098039, 0, 1,
-2.143002, -1.509105, -2.848423, 1, 0.1137255, 0, 1,
-2.130312, 0.0452147, -1.561116, 1, 0.1215686, 0, 1,
-2.120408, -0.07902917, -0.726055, 1, 0.1254902, 0, 1,
-2.108011, 1.57415, 0.2559504, 1, 0.1333333, 0, 1,
-2.055133, -1.333379, -3.044387, 1, 0.1372549, 0, 1,
-2.048009, 0.1726251, -1.15378, 1, 0.145098, 0, 1,
-2.045321, -0.8332573, -0.7500608, 1, 0.1490196, 0, 1,
-2.040717, 0.6300246, -0.4821224, 1, 0.1568628, 0, 1,
-2.019848, -0.04821175, -2.657281, 1, 0.1607843, 0, 1,
-1.989051, -0.7783911, -0.6717636, 1, 0.1686275, 0, 1,
-1.987562, 0.01574371, -1.442691, 1, 0.172549, 0, 1,
-1.985878, 0.167875, -1.599388, 1, 0.1803922, 0, 1,
-1.96489, -0.8479099, -2.52548, 1, 0.1843137, 0, 1,
-1.917563, 1.405126, -0.07621464, 1, 0.1921569, 0, 1,
-1.894118, -0.02416018, -2.182522, 1, 0.1960784, 0, 1,
-1.888619, -0.1834365, -0.970643, 1, 0.2039216, 0, 1,
-1.870354, 0.2195155, -0.1374444, 1, 0.2117647, 0, 1,
-1.868238, -1.143964, -1.361275, 1, 0.2156863, 0, 1,
-1.864886, -0.4624578, -0.9175287, 1, 0.2235294, 0, 1,
-1.86376, 2.337708, 1.385323, 1, 0.227451, 0, 1,
-1.829824, 0.02710315, -2.737106, 1, 0.2352941, 0, 1,
-1.829525, -0.6056458, -1.833623, 1, 0.2392157, 0, 1,
-1.826547, -0.7803, -3.590567, 1, 0.2470588, 0, 1,
-1.825762, 0.9202921, -1.513501, 1, 0.2509804, 0, 1,
-1.824154, -0.2455368, -1.287658, 1, 0.2588235, 0, 1,
-1.79718, -1.030487, -0.9935387, 1, 0.2627451, 0, 1,
-1.788661, -0.2359264, -2.571685, 1, 0.2705882, 0, 1,
-1.724061, 0.5221362, -1.27853, 1, 0.2745098, 0, 1,
-1.722944, 1.368938, -1.517243, 1, 0.282353, 0, 1,
-1.712189, 0.97044, -1.368648, 1, 0.2862745, 0, 1,
-1.7076, 0.7828088, -0.4968994, 1, 0.2941177, 0, 1,
-1.69497, 0.7003319, -1.502948, 1, 0.3019608, 0, 1,
-1.683397, 0.9535805, 0.600371, 1, 0.3058824, 0, 1,
-1.68299, 1.582764, -1.418401, 1, 0.3137255, 0, 1,
-1.682394, -0.5060902, -1.819227, 1, 0.3176471, 0, 1,
-1.670441, -0.9899044, -1.587111, 1, 0.3254902, 0, 1,
-1.645316, -0.7227786, -1.599769, 1, 0.3294118, 0, 1,
-1.626048, -0.4348571, -1.185638, 1, 0.3372549, 0, 1,
-1.606754, -0.04309671, 0.0281822, 1, 0.3411765, 0, 1,
-1.60584, 0.9677173, -1.266711, 1, 0.3490196, 0, 1,
-1.602026, 1.678376, -0.8808994, 1, 0.3529412, 0, 1,
-1.596622, -0.08354389, -2.076109, 1, 0.3607843, 0, 1,
-1.594318, -0.2166659, -0.9454827, 1, 0.3647059, 0, 1,
-1.587558, 0.989337, -3.134423, 1, 0.372549, 0, 1,
-1.587225, -1.21237, -0.6356904, 1, 0.3764706, 0, 1,
-1.578633, 1.900588, -0.01173788, 1, 0.3843137, 0, 1,
-1.578055, 0.7823086, -0.2371179, 1, 0.3882353, 0, 1,
-1.568418, 2.168642, -0.9840981, 1, 0.3960784, 0, 1,
-1.55603, -0.02704115, -1.332431, 1, 0.4039216, 0, 1,
-1.535781, -0.4702654, -2.841969, 1, 0.4078431, 0, 1,
-1.534673, -0.6663531, -1.057855, 1, 0.4156863, 0, 1,
-1.517087, -0.8057835, -1.849693, 1, 0.4196078, 0, 1,
-1.504068, 0.5749683, -2.170553, 1, 0.427451, 0, 1,
-1.494269, 0.09998567, -1.482526, 1, 0.4313726, 0, 1,
-1.48844, 1.305574, -1.543867, 1, 0.4392157, 0, 1,
-1.482861, 0.6015305, -0.4522019, 1, 0.4431373, 0, 1,
-1.472684, -0.4684885, -0.9835528, 1, 0.4509804, 0, 1,
-1.469093, 0.7232445, -1.391796, 1, 0.454902, 0, 1,
-1.462754, -1.453769, -1.857354, 1, 0.4627451, 0, 1,
-1.445226, -0.2942193, -2.670498, 1, 0.4666667, 0, 1,
-1.439802, 0.5376931, -2.533677, 1, 0.4745098, 0, 1,
-1.439066, 0.6008725, -0.8929026, 1, 0.4784314, 0, 1,
-1.42943, -0.766921, -2.26438, 1, 0.4862745, 0, 1,
-1.429168, -1.50401, -3.165661, 1, 0.4901961, 0, 1,
-1.409998, 0.09601423, -0.001234722, 1, 0.4980392, 0, 1,
-1.407931, 1.478878, -1.773257, 1, 0.5058824, 0, 1,
-1.394425, 0.7354687, -2.072405, 1, 0.509804, 0, 1,
-1.383785, -0.4619713, -1.470014, 1, 0.5176471, 0, 1,
-1.382702, 0.2958784, -1.097642, 1, 0.5215687, 0, 1,
-1.382152, 0.3008618, -0.6442453, 1, 0.5294118, 0, 1,
-1.380365, 0.4872535, 1.052903, 1, 0.5333334, 0, 1,
-1.36634, -0.4739876, -2.453923, 1, 0.5411765, 0, 1,
-1.3656, 0.3148347, -0.3395226, 1, 0.5450981, 0, 1,
-1.365577, -1.295408, -2.702588, 1, 0.5529412, 0, 1,
-1.365417, 1.012424, -1.35096, 1, 0.5568628, 0, 1,
-1.360148, 0.2572357, -2.685012, 1, 0.5647059, 0, 1,
-1.355001, -0.7861161, -3.481209, 1, 0.5686275, 0, 1,
-1.336093, -0.525708, -1.622202, 1, 0.5764706, 0, 1,
-1.332734, -0.2117367, -1.701391, 1, 0.5803922, 0, 1,
-1.324501, -2.579236, -1.945515, 1, 0.5882353, 0, 1,
-1.307581, 1.136318, 0.694268, 1, 0.5921569, 0, 1,
-1.303883, 0.235269, -1.491952, 1, 0.6, 0, 1,
-1.284772, 0.09900856, -1.607875, 1, 0.6078432, 0, 1,
-1.278091, 0.550403, -0.1343196, 1, 0.6117647, 0, 1,
-1.274961, 0.5438955, -0.9888135, 1, 0.6196079, 0, 1,
-1.272876, -1.836948, -1.780786, 1, 0.6235294, 0, 1,
-1.272242, 0.4610157, -2.04281, 1, 0.6313726, 0, 1,
-1.261439, -0.2020016, -2.487752, 1, 0.6352941, 0, 1,
-1.259698, 0.4290392, -0.3470646, 1, 0.6431373, 0, 1,
-1.259223, 1.091094, -1.146262, 1, 0.6470588, 0, 1,
-1.257528, 2.508492, 1.171067, 1, 0.654902, 0, 1,
-1.252126, -0.194379, -2.064379, 1, 0.6588235, 0, 1,
-1.244922, 2.472193, -2.160313, 1, 0.6666667, 0, 1,
-1.238, 0.3430937, -0.6727452, 1, 0.6705883, 0, 1,
-1.226254, -0.1156005, -1.402142, 1, 0.6784314, 0, 1,
-1.225307, 0.5138997, -0.3392283, 1, 0.682353, 0, 1,
-1.223021, -0.6144382, -4.281286, 1, 0.6901961, 0, 1,
-1.21327, -0.1685617, -1.154597, 1, 0.6941177, 0, 1,
-1.202067, -0.8114645, -3.538086, 1, 0.7019608, 0, 1,
-1.199217, 0.8312968, -0.5121593, 1, 0.7098039, 0, 1,
-1.19905, 1.106434, -0.6810963, 1, 0.7137255, 0, 1,
-1.186804, -0.115044, -2.451418, 1, 0.7215686, 0, 1,
-1.184956, 0.960358, -1.161691, 1, 0.7254902, 0, 1,
-1.182071, 1.084633, -1.683325, 1, 0.7333333, 0, 1,
-1.174797, -0.726693, -0.3591755, 1, 0.7372549, 0, 1,
-1.169768, -1.281026, -0.5286845, 1, 0.7450981, 0, 1,
-1.161777, 2.400038, -1.81159, 1, 0.7490196, 0, 1,
-1.160292, 0.2110365, -2.804078, 1, 0.7568628, 0, 1,
-1.15484, -0.5098254, -1.245082, 1, 0.7607843, 0, 1,
-1.154353, 0.6865603, -1.348246, 1, 0.7686275, 0, 1,
-1.14889, -1.495347, -0.9060023, 1, 0.772549, 0, 1,
-1.147015, 0.7406764, -2.66545, 1, 0.7803922, 0, 1,
-1.140017, 2.25393, -0.3394988, 1, 0.7843137, 0, 1,
-1.139729, 2.116166, -1.831334, 1, 0.7921569, 0, 1,
-1.138746, -1.144907, -1.264618, 1, 0.7960784, 0, 1,
-1.137917, -1.338127, -3.051515, 1, 0.8039216, 0, 1,
-1.137715, 1.563601, -0.2395362, 1, 0.8117647, 0, 1,
-1.136109, 0.05792149, -3.280752, 1, 0.8156863, 0, 1,
-1.131049, 0.03597917, -1.319257, 1, 0.8235294, 0, 1,
-1.124196, -0.6959928, -0.9981425, 1, 0.827451, 0, 1,
-1.122186, 2.185714, -0.8348395, 1, 0.8352941, 0, 1,
-1.119682, -0.9030933, -3.610648, 1, 0.8392157, 0, 1,
-1.111681, 0.6788838, -1.871205, 1, 0.8470588, 0, 1,
-1.110984, 1.286329, -2.088835, 1, 0.8509804, 0, 1,
-1.109825, -0.6160831, -3.224387, 1, 0.8588235, 0, 1,
-1.107536, 0.6716356, -0.6965201, 1, 0.8627451, 0, 1,
-1.105935, 0.4486714, -0.4260064, 1, 0.8705882, 0, 1,
-1.091415, 1.051413, -2.031005, 1, 0.8745098, 0, 1,
-1.079973, 0.2999201, 0.02011249, 1, 0.8823529, 0, 1,
-1.075945, -0.04313045, -1.279903, 1, 0.8862745, 0, 1,
-1.071169, -0.4646976, -2.521388, 1, 0.8941177, 0, 1,
-1.070795, 2.449164, -1.163572, 1, 0.8980392, 0, 1,
-1.068647, 1.231012, -0.05337533, 1, 0.9058824, 0, 1,
-1.068622, 2.003875, 0.01871086, 1, 0.9137255, 0, 1,
-1.059588, -1.319358, -4.329925, 1, 0.9176471, 0, 1,
-1.056482, 1.296443, -0.6391521, 1, 0.9254902, 0, 1,
-1.050229, 0.1273067, -2.255058, 1, 0.9294118, 0, 1,
-1.048328, 0.3491593, 1.104307, 1, 0.9372549, 0, 1,
-1.045739, 1.217726, -0.03983155, 1, 0.9411765, 0, 1,
-1.039323, -0.1034171, 0.7803413, 1, 0.9490196, 0, 1,
-1.037779, -0.6624163, -2.346845, 1, 0.9529412, 0, 1,
-1.032037, -0.5432869, -2.761428, 1, 0.9607843, 0, 1,
-1.022172, -0.7157797, -2.052552, 1, 0.9647059, 0, 1,
-1.017052, 0.7271466, -1.772389, 1, 0.972549, 0, 1,
-1.013411, -0.1547355, -1.495598, 1, 0.9764706, 0, 1,
-1.011122, -0.2131106, -1.433876, 1, 0.9843137, 0, 1,
-0.9943853, 1.712066, 1.142819, 1, 0.9882353, 0, 1,
-0.9907827, -0.06295249, 0.4340695, 1, 0.9960784, 0, 1,
-0.9872807, 1.260377, 0.8967608, 0.9960784, 1, 0, 1,
-0.9861758, 0.7593516, 0.03968823, 0.9921569, 1, 0, 1,
-0.9825948, 1.038902, -0.5270802, 0.9843137, 1, 0, 1,
-0.982072, -0.1005354, -3.670372, 0.9803922, 1, 0, 1,
-0.9805154, 0.7657207, -1.398373, 0.972549, 1, 0, 1,
-0.9805078, -0.7093286, -4.132678, 0.9686275, 1, 0, 1,
-0.9774836, -0.07165699, -1.778571, 0.9607843, 1, 0, 1,
-0.968567, 1.216195, -1.455108, 0.9568627, 1, 0, 1,
-0.9664513, -0.1950349, -2.343459, 0.9490196, 1, 0, 1,
-0.964232, -1.411818, -3.658042, 0.945098, 1, 0, 1,
-0.9584031, -1.799906, -1.651035, 0.9372549, 1, 0, 1,
-0.9573254, -0.3188287, -0.6257594, 0.9333333, 1, 0, 1,
-0.9503989, 0.8787079, -0.7875744, 0.9254902, 1, 0, 1,
-0.9469922, -0.6270015, -3.328432, 0.9215686, 1, 0, 1,
-0.9454874, 0.5311117, -1.432938, 0.9137255, 1, 0, 1,
-0.9405314, 1.350968, -1.556772, 0.9098039, 1, 0, 1,
-0.9397348, -0.3418904, -4.039907, 0.9019608, 1, 0, 1,
-0.9328216, 0.1222576, 0.2314532, 0.8941177, 1, 0, 1,
-0.9156438, 0.4141947, -2.243482, 0.8901961, 1, 0, 1,
-0.9153265, -0.8391659, -3.496867, 0.8823529, 1, 0, 1,
-0.9073144, 0.6333246, -2.649147, 0.8784314, 1, 0, 1,
-0.9029736, 0.3459897, -3.403926, 0.8705882, 1, 0, 1,
-0.9026194, 1.698885, -0.9570414, 0.8666667, 1, 0, 1,
-0.9006733, -0.371772, -0.6053912, 0.8588235, 1, 0, 1,
-0.8992302, -2.191268, -1.915156, 0.854902, 1, 0, 1,
-0.8968864, -1.07954, -1.105069, 0.8470588, 1, 0, 1,
-0.8944083, -2.465679, -3.236563, 0.8431373, 1, 0, 1,
-0.8937457, 1.035335, -1.876912, 0.8352941, 1, 0, 1,
-0.8894136, -1.463029, -2.677189, 0.8313726, 1, 0, 1,
-0.8809638, 0.4487642, -1.707689, 0.8235294, 1, 0, 1,
-0.8716294, 0.7511734, -0.3275216, 0.8196079, 1, 0, 1,
-0.8699331, -0.9467522, -2.607056, 0.8117647, 1, 0, 1,
-0.8695205, -1.354962, -1.514445, 0.8078431, 1, 0, 1,
-0.8675485, -0.343391, -0.2768703, 0.8, 1, 0, 1,
-0.8663142, -0.6837574, -1.84643, 0.7921569, 1, 0, 1,
-0.8653257, 0.5272666, -1.10719, 0.7882353, 1, 0, 1,
-0.854149, 0.07858349, -2.899263, 0.7803922, 1, 0, 1,
-0.8496044, -0.1984344, -2.670213, 0.7764706, 1, 0, 1,
-0.8352213, -1.158495, -2.447997, 0.7686275, 1, 0, 1,
-0.8287078, -0.7839496, -2.422284, 0.7647059, 1, 0, 1,
-0.8204087, 0.8388914, -2.487728, 0.7568628, 1, 0, 1,
-0.8200579, 1.251559, -0.06959747, 0.7529412, 1, 0, 1,
-0.8171641, -1.591484, -2.560895, 0.7450981, 1, 0, 1,
-0.8151615, 0.4892646, 0.5015919, 0.7411765, 1, 0, 1,
-0.8136763, 1.31604, -0.6453956, 0.7333333, 1, 0, 1,
-0.8118364, -0.6951852, -2.757274, 0.7294118, 1, 0, 1,
-0.8028432, -0.280429, -3.730121, 0.7215686, 1, 0, 1,
-0.7938887, 0.1765896, -1.459251, 0.7176471, 1, 0, 1,
-0.7931572, 0.9625944, -2.482344, 0.7098039, 1, 0, 1,
-0.7925306, 1.043857, -1.710268, 0.7058824, 1, 0, 1,
-0.7902551, 1.168457, -1.511305, 0.6980392, 1, 0, 1,
-0.7879117, -0.4339956, -1.95698, 0.6901961, 1, 0, 1,
-0.782855, -0.7803537, -1.981225, 0.6862745, 1, 0, 1,
-0.7679511, -1.669931, -2.665724, 0.6784314, 1, 0, 1,
-0.7573319, 0.02244568, -2.571121, 0.6745098, 1, 0, 1,
-0.7506661, -0.3513085, -2.154407, 0.6666667, 1, 0, 1,
-0.7481664, -0.636127, -1.453293, 0.6627451, 1, 0, 1,
-0.7476972, -0.8049189, -1.97405, 0.654902, 1, 0, 1,
-0.7472336, 0.4382182, 0.3645542, 0.6509804, 1, 0, 1,
-0.7457134, 1.799914, -0.08401269, 0.6431373, 1, 0, 1,
-0.7422929, -0.1130634, -0.2413792, 0.6392157, 1, 0, 1,
-0.7335162, 1.169592, -0.9551185, 0.6313726, 1, 0, 1,
-0.7307594, -0.2859268, -3.452493, 0.627451, 1, 0, 1,
-0.7296641, -0.5969451, -2.14616, 0.6196079, 1, 0, 1,
-0.7290528, 1.103952, -2.468522, 0.6156863, 1, 0, 1,
-0.7285686, 0.8611033, -0.4861829, 0.6078432, 1, 0, 1,
-0.7276863, 0.1402374, -0.5544298, 0.6039216, 1, 0, 1,
-0.7225975, -0.2551185, -0.2522921, 0.5960785, 1, 0, 1,
-0.7120798, 0.3643866, -2.051522, 0.5882353, 1, 0, 1,
-0.7095784, 0.9027485, 0.1943288, 0.5843138, 1, 0, 1,
-0.7064263, 0.6014298, 0.9467208, 0.5764706, 1, 0, 1,
-0.7040495, 1.282108, -1.834462, 0.572549, 1, 0, 1,
-0.6923751, 0.9262469, -1.129931, 0.5647059, 1, 0, 1,
-0.6916713, -0.9258428, -2.859968, 0.5607843, 1, 0, 1,
-0.6907132, -0.3908788, -2.343917, 0.5529412, 1, 0, 1,
-0.6892564, 0.794014, -1.252074, 0.5490196, 1, 0, 1,
-0.6864015, -0.4728993, -2.71472, 0.5411765, 1, 0, 1,
-0.6848505, 2.33219, 0.4116175, 0.5372549, 1, 0, 1,
-0.681336, 0.5754384, -1.197933, 0.5294118, 1, 0, 1,
-0.6796325, 1.814438, -1.93693, 0.5254902, 1, 0, 1,
-0.6782871, 0.6674304, -2.400679, 0.5176471, 1, 0, 1,
-0.677919, 1.07739, -0.110497, 0.5137255, 1, 0, 1,
-0.6723006, -0.7835825, -1.491591, 0.5058824, 1, 0, 1,
-0.6714321, -0.3900415, -1.049517, 0.5019608, 1, 0, 1,
-0.6689433, 0.5691403, -0.8910444, 0.4941176, 1, 0, 1,
-0.6685745, -0.5514185, -1.231689, 0.4862745, 1, 0, 1,
-0.6670567, -1.392809, -3.576702, 0.4823529, 1, 0, 1,
-0.6643012, 0.9274381, 0.4734419, 0.4745098, 1, 0, 1,
-0.6598572, 0.3897451, -1.14688, 0.4705882, 1, 0, 1,
-0.6525954, 0.03516814, -1.768652, 0.4627451, 1, 0, 1,
-0.6489615, 1.760559, -0.7994562, 0.4588235, 1, 0, 1,
-0.647455, -0.8100634, -2.801702, 0.4509804, 1, 0, 1,
-0.6462423, -0.1315998, -1.136848, 0.4470588, 1, 0, 1,
-0.6432485, -0.08075248, -2.381537, 0.4392157, 1, 0, 1,
-0.6413432, -1.91818, -2.336402, 0.4352941, 1, 0, 1,
-0.6387789, -0.4077325, -1.372771, 0.427451, 1, 0, 1,
-0.6375709, -0.700893, -4.142463, 0.4235294, 1, 0, 1,
-0.6369945, -3.24565, -2.860122, 0.4156863, 1, 0, 1,
-0.6325819, -1.004256, -1.652969, 0.4117647, 1, 0, 1,
-0.6314489, -1.209096, -2.024427, 0.4039216, 1, 0, 1,
-0.6302279, 0.5906739, 0.432087, 0.3960784, 1, 0, 1,
-0.6298791, -0.3311491, 0.3837432, 0.3921569, 1, 0, 1,
-0.6231918, -0.03238789, -0.7343976, 0.3843137, 1, 0, 1,
-0.6210124, -1.777432, -3.84687, 0.3803922, 1, 0, 1,
-0.6201745, 1.2284, -0.6468686, 0.372549, 1, 0, 1,
-0.6181324, -1.240402, -2.841585, 0.3686275, 1, 0, 1,
-0.6178383, 1.055207, -0.6962317, 0.3607843, 1, 0, 1,
-0.613564, -0.8946884, -4.17686, 0.3568628, 1, 0, 1,
-0.6090373, -0.6892626, -2.271461, 0.3490196, 1, 0, 1,
-0.6070601, 0.1634304, -3.401842, 0.345098, 1, 0, 1,
-0.6067012, 0.1071071, 1.364662, 0.3372549, 1, 0, 1,
-0.6055592, -0.1477361, -1.844201, 0.3333333, 1, 0, 1,
-0.6051491, -1.427357, -2.155674, 0.3254902, 1, 0, 1,
-0.5954592, 0.9432967, -0.01317883, 0.3215686, 1, 0, 1,
-0.5943538, -0.8075466, 0.4178461, 0.3137255, 1, 0, 1,
-0.5928915, -1.166127, -1.455157, 0.3098039, 1, 0, 1,
-0.5918809, 1.027194, -0.182586, 0.3019608, 1, 0, 1,
-0.5813763, 1.069926, -0.6827145, 0.2941177, 1, 0, 1,
-0.5716851, 0.002512995, -1.142244, 0.2901961, 1, 0, 1,
-0.5716239, -0.2649691, -3.713245, 0.282353, 1, 0, 1,
-0.5714072, -0.8586003, -1.002786, 0.2784314, 1, 0, 1,
-0.5713909, 0.1565022, -0.9842624, 0.2705882, 1, 0, 1,
-0.5713124, 0.3004626, -0.3790638, 0.2666667, 1, 0, 1,
-0.5681065, -0.5840392, -3.848304, 0.2588235, 1, 0, 1,
-0.5644956, 1.320793, 0.1484747, 0.254902, 1, 0, 1,
-0.5628687, 1.21012, 0.007122288, 0.2470588, 1, 0, 1,
-0.5583622, -3.315728, -3.857269, 0.2431373, 1, 0, 1,
-0.5555913, -1.068211, -0.5390399, 0.2352941, 1, 0, 1,
-0.5534164, 0.1316015, -0.5601313, 0.2313726, 1, 0, 1,
-0.5525221, 0.7448058, -2.267992, 0.2235294, 1, 0, 1,
-0.5487452, -0.04829736, -0.6494851, 0.2196078, 1, 0, 1,
-0.5427365, 0.1721233, -1.341525, 0.2117647, 1, 0, 1,
-0.5364569, -0.4519658, -2.103772, 0.2078431, 1, 0, 1,
-0.5363923, 0.2624132, -1.076534, 0.2, 1, 0, 1,
-0.5303519, 0.1178293, -1.153128, 0.1921569, 1, 0, 1,
-0.5238888, 2.176602, 0.4239957, 0.1882353, 1, 0, 1,
-0.5146596, 0.6115005, -0.4069919, 0.1803922, 1, 0, 1,
-0.5073248, 0.1724239, -2.407949, 0.1764706, 1, 0, 1,
-0.5071928, -0.5216237, -2.379085, 0.1686275, 1, 0, 1,
-0.507123, 0.7020333, 0.4399352, 0.1647059, 1, 0, 1,
-0.5051492, 1.107044, -0.7410638, 0.1568628, 1, 0, 1,
-0.4972166, -0.9833329, -2.043604, 0.1529412, 1, 0, 1,
-0.4958894, -1.059271, -3.919214, 0.145098, 1, 0, 1,
-0.4923497, 0.4838764, -1.767708, 0.1411765, 1, 0, 1,
-0.4889366, -0.3108651, -4.222139, 0.1333333, 1, 0, 1,
-0.4782925, -2.930064, -1.779766, 0.1294118, 1, 0, 1,
-0.4767335, -0.3159468, -2.425076, 0.1215686, 1, 0, 1,
-0.4748086, -0.02019463, -3.784583, 0.1176471, 1, 0, 1,
-0.4726345, -0.7113029, -1.293113, 0.1098039, 1, 0, 1,
-0.4715721, 0.6687865, -0.6620966, 0.1058824, 1, 0, 1,
-0.4713562, 0.5815372, -2.311205, 0.09803922, 1, 0, 1,
-0.464012, -1.367852, -2.870793, 0.09019608, 1, 0, 1,
-0.4619595, -1.436926, -2.343121, 0.08627451, 1, 0, 1,
-0.4603894, -1.409577, -3.159855, 0.07843138, 1, 0, 1,
-0.4540121, 0.3396948, 0.578438, 0.07450981, 1, 0, 1,
-0.4522051, 1.375837, 2.134279, 0.06666667, 1, 0, 1,
-0.4492738, -0.2817011, -0.4820639, 0.0627451, 1, 0, 1,
-0.4481122, -0.9129242, -2.874551, 0.05490196, 1, 0, 1,
-0.4470749, 0.3814341, -1.137599, 0.05098039, 1, 0, 1,
-0.4443349, -2.22127, -1.101861, 0.04313726, 1, 0, 1,
-0.4427461, 0.5777826, -0.2816789, 0.03921569, 1, 0, 1,
-0.4424335, 2.065258, 2.171774, 0.03137255, 1, 0, 1,
-0.4393137, -1.341557, -2.698607, 0.02745098, 1, 0, 1,
-0.4384849, -0.5134424, -2.587961, 0.01960784, 1, 0, 1,
-0.4349882, -0.7640378, -3.319205, 0.01568628, 1, 0, 1,
-0.4333546, -0.3123941, -2.998156, 0.007843138, 1, 0, 1,
-0.4288439, -0.16782, -1.564729, 0.003921569, 1, 0, 1,
-0.4278697, -0.3470798, -1.63524, 0, 1, 0.003921569, 1,
-0.4236396, -1.273203, -2.652764, 0, 1, 0.01176471, 1,
-0.4154451, 0.08380403, -2.643131, 0, 1, 0.01568628, 1,
-0.4135748, -0.8384106, -3.572916, 0, 1, 0.02352941, 1,
-0.4099361, 0.04529222, -2.534371, 0, 1, 0.02745098, 1,
-0.4030625, -0.2000747, -1.562217, 0, 1, 0.03529412, 1,
-0.4029484, -0.3524667, -3.049908, 0, 1, 0.03921569, 1,
-0.4018896, 0.1643915, 0.2305654, 0, 1, 0.04705882, 1,
-0.4004692, 0.6906044, 0.01166969, 0, 1, 0.05098039, 1,
-0.393987, 0.4533261, 0.4465583, 0, 1, 0.05882353, 1,
-0.3929509, 0.1016763, -1.819008, 0, 1, 0.0627451, 1,
-0.3917049, 0.5556434, -1.345233, 0, 1, 0.07058824, 1,
-0.3819703, -0.6502449, -2.010136, 0, 1, 0.07450981, 1,
-0.3808239, 0.1208525, -1.01962, 0, 1, 0.08235294, 1,
-0.3794548, 0.406722, -1.851965, 0, 1, 0.08627451, 1,
-0.3793632, -0.5407692, -3.318827, 0, 1, 0.09411765, 1,
-0.3780411, 0.6959127, -1.331347, 0, 1, 0.1019608, 1,
-0.3754403, 2.140704, 1.05979, 0, 1, 0.1058824, 1,
-0.3743875, -0.2309773, -3.099105, 0, 1, 0.1137255, 1,
-0.3732539, -0.03161833, 0.04777619, 0, 1, 0.1176471, 1,
-0.3686399, -1.104322, -2.997874, 0, 1, 0.1254902, 1,
-0.3678722, -1.768109, -2.518285, 0, 1, 0.1294118, 1,
-0.3617575, -1.276533, -0.9769378, 0, 1, 0.1372549, 1,
-0.3617448, -1.301939, -2.972571, 0, 1, 0.1411765, 1,
-0.3600556, -0.6689434, -2.431079, 0, 1, 0.1490196, 1,
-0.3595341, 1.623125, 0.5463394, 0, 1, 0.1529412, 1,
-0.357131, -0.8154444, -2.397709, 0, 1, 0.1607843, 1,
-0.3523571, -0.347725, -1.922208, 0, 1, 0.1647059, 1,
-0.3459724, -1.100256, -3.886407, 0, 1, 0.172549, 1,
-0.3459285, 0.9425349, -0.4139636, 0, 1, 0.1764706, 1,
-0.3415533, -0.4005133, -4.554255, 0, 1, 0.1843137, 1,
-0.3390867, 0.03050414, -1.093108, 0, 1, 0.1882353, 1,
-0.3363944, -0.4089517, -1.66762, 0, 1, 0.1960784, 1,
-0.3356876, 0.9215645, 1.010847, 0, 1, 0.2039216, 1,
-0.3355496, -3.347863, -4.009837, 0, 1, 0.2078431, 1,
-0.3331297, 0.007176185, -0.251017, 0, 1, 0.2156863, 1,
-0.328437, 1.909181, 0.2606099, 0, 1, 0.2196078, 1,
-0.3255764, -0.3895511, -5.104709, 0, 1, 0.227451, 1,
-0.3207122, -0.3637998, -1.963131, 0, 1, 0.2313726, 1,
-0.319975, 0.1031527, -0.9971405, 0, 1, 0.2392157, 1,
-0.3194291, -2.138723, -5.100375, 0, 1, 0.2431373, 1,
-0.3155167, 0.9108273, 0.09591845, 0, 1, 0.2509804, 1,
-0.3146338, -0.0717146, -1.963771, 0, 1, 0.254902, 1,
-0.3130884, 0.5693047, -0.8578362, 0, 1, 0.2627451, 1,
-0.3102593, -0.01114597, -0.3025097, 0, 1, 0.2666667, 1,
-0.3093901, 0.08979359, -1.303872, 0, 1, 0.2745098, 1,
-0.3054723, -1.067178, -4.772877, 0, 1, 0.2784314, 1,
-0.3004324, 0.9151236, -0.6212106, 0, 1, 0.2862745, 1,
-0.2990657, 0.778702, 0.9298334, 0, 1, 0.2901961, 1,
-0.2960278, -2.329248, -0.2819417, 0, 1, 0.2980392, 1,
-0.2933179, -1.726423, -2.763719, 0, 1, 0.3058824, 1,
-0.2877569, 0.5824063, 1.532404, 0, 1, 0.3098039, 1,
-0.287481, 0.0707852, -3.372499, 0, 1, 0.3176471, 1,
-0.2823125, -0.4067275, -3.073661, 0, 1, 0.3215686, 1,
-0.2806834, -1.520699, -1.550797, 0, 1, 0.3294118, 1,
-0.2799704, 1.231594, 1.105826, 0, 1, 0.3333333, 1,
-0.2767639, -0.01176268, 1.138872, 0, 1, 0.3411765, 1,
-0.2731419, 2.316162, -0.02548914, 0, 1, 0.345098, 1,
-0.2717732, -1.583815, -6.034908, 0, 1, 0.3529412, 1,
-0.2713699, -1.473322, -3.86254, 0, 1, 0.3568628, 1,
-0.2707267, 0.1390505, -1.02806, 0, 1, 0.3647059, 1,
-0.2705508, -0.8990755, -3.138698, 0, 1, 0.3686275, 1,
-0.2689405, 1.946902, -0.1235823, 0, 1, 0.3764706, 1,
-0.2682269, -0.04261554, -0.5612246, 0, 1, 0.3803922, 1,
-0.2656361, 1.294305, 0.7100304, 0, 1, 0.3882353, 1,
-0.2650884, 0.6006091, 0.3917286, 0, 1, 0.3921569, 1,
-0.2639566, 0.853242, -0.9342297, 0, 1, 0.4, 1,
-0.2614456, 1.138353, -0.9740773, 0, 1, 0.4078431, 1,
-0.2586696, -1.601035, -3.00169, 0, 1, 0.4117647, 1,
-0.2572677, 0.9164099, 0.2658063, 0, 1, 0.4196078, 1,
-0.2535778, -0.3549367, -2.523365, 0, 1, 0.4235294, 1,
-0.2494086, 0.9666477, 0.3828886, 0, 1, 0.4313726, 1,
-0.2482907, -1.476003, -3.881352, 0, 1, 0.4352941, 1,
-0.2462286, -0.2496411, -2.638662, 0, 1, 0.4431373, 1,
-0.2437153, 0.4847289, -0.5115471, 0, 1, 0.4470588, 1,
-0.2409379, -0.666148, -1.772852, 0, 1, 0.454902, 1,
-0.2399915, 0.3074091, -0.07607224, 0, 1, 0.4588235, 1,
-0.2351624, -0.5102469, -2.207315, 0, 1, 0.4666667, 1,
-0.2347225, -1.871315, -2.998741, 0, 1, 0.4705882, 1,
-0.2343093, -0.3155825, -2.267859, 0, 1, 0.4784314, 1,
-0.229999, 0.6537161, -0.5373682, 0, 1, 0.4823529, 1,
-0.2271884, 0.4296626, -1.757412, 0, 1, 0.4901961, 1,
-0.2237196, 0.4104041, 1.343656, 0, 1, 0.4941176, 1,
-0.2204048, -0.8353804, -4.073349, 0, 1, 0.5019608, 1,
-0.2182518, 0.3059334, -2.330369, 0, 1, 0.509804, 1,
-0.2158681, -0.0838955, -3.705967, 0, 1, 0.5137255, 1,
-0.2142206, -1.02621, -3.840436, 0, 1, 0.5215687, 1,
-0.211968, -0.5561653, -2.076725, 0, 1, 0.5254902, 1,
-0.2076492, 0.7180692, 0.5077131, 0, 1, 0.5333334, 1,
-0.2074676, -1.417043, -1.080851, 0, 1, 0.5372549, 1,
-0.2065675, -0.07369898, -1.607769, 0, 1, 0.5450981, 1,
-0.202293, -1.333403, -3.110718, 0, 1, 0.5490196, 1,
-0.2022738, 1.149055, 0.5826751, 0, 1, 0.5568628, 1,
-0.1993033, -0.5426094, -2.811442, 0, 1, 0.5607843, 1,
-0.1978139, 0.8761164, -0.4019873, 0, 1, 0.5686275, 1,
-0.196297, 0.9295847, -0.420122, 0, 1, 0.572549, 1,
-0.1954162, -0.33406, -2.957113, 0, 1, 0.5803922, 1,
-0.1930268, -0.3329388, -1.49573, 0, 1, 0.5843138, 1,
-0.1867415, -0.3738241, -2.464917, 0, 1, 0.5921569, 1,
-0.1840653, -0.1817566, -3.623565, 0, 1, 0.5960785, 1,
-0.1835894, -0.9132759, -4.317578, 0, 1, 0.6039216, 1,
-0.182916, -0.3526671, -2.466971, 0, 1, 0.6117647, 1,
-0.1819197, -0.6558659, -2.824616, 0, 1, 0.6156863, 1,
-0.1817009, -0.1354536, -2.230595, 0, 1, 0.6235294, 1,
-0.175114, -0.4190194, -2.527413, 0, 1, 0.627451, 1,
-0.1747816, -1.228725, -0.6664209, 0, 1, 0.6352941, 1,
-0.1740428, -0.02333271, -1.41781, 0, 1, 0.6392157, 1,
-0.1737445, -2.379715, -3.290058, 0, 1, 0.6470588, 1,
-0.1697243, 0.5682441, 0.2012258, 0, 1, 0.6509804, 1,
-0.1666334, -0.5992659, -1.620578, 0, 1, 0.6588235, 1,
-0.1658657, -0.2856114, -2.680156, 0, 1, 0.6627451, 1,
-0.1622979, 0.6648468, 0.5064943, 0, 1, 0.6705883, 1,
-0.1604176, -0.06366231, -1.242382, 0, 1, 0.6745098, 1,
-0.1483945, 0.7009889, -0.3884372, 0, 1, 0.682353, 1,
-0.1478137, 0.8667023, 0.2244923, 0, 1, 0.6862745, 1,
-0.1454613, -0.7217216, -3.791184, 0, 1, 0.6941177, 1,
-0.1412155, 0.6874224, -1.154335, 0, 1, 0.7019608, 1,
-0.1405468, -0.4154827, -1.079747, 0, 1, 0.7058824, 1,
-0.1363773, -0.8807688, -2.844656, 0, 1, 0.7137255, 1,
-0.1349164, -0.1787988, -4.477698, 0, 1, 0.7176471, 1,
-0.1343246, 1.561271, -0.721509, 0, 1, 0.7254902, 1,
-0.1281585, -0.1259721, -2.821643, 0, 1, 0.7294118, 1,
-0.126766, -0.4031541, -2.941869, 0, 1, 0.7372549, 1,
-0.1251716, -0.6890547, -4.489377, 0, 1, 0.7411765, 1,
-0.1241039, 0.9248794, 0.08351666, 0, 1, 0.7490196, 1,
-0.1222318, 0.5517559, 1.05794, 0, 1, 0.7529412, 1,
-0.1152827, -0.1622503, -2.078199, 0, 1, 0.7607843, 1,
-0.1140199, 0.6321118, 0.4657196, 0, 1, 0.7647059, 1,
-0.1122962, -0.9087024, -2.929593, 0, 1, 0.772549, 1,
-0.1104475, -0.8804581, -3.258203, 0, 1, 0.7764706, 1,
-0.1072984, 0.3698506, -0.6540141, 0, 1, 0.7843137, 1,
-0.09962191, 0.3276653, -0.1791232, 0, 1, 0.7882353, 1,
-0.08846764, -0.2304984, -2.870246, 0, 1, 0.7960784, 1,
-0.08388051, 0.6860718, -0.02155858, 0, 1, 0.8039216, 1,
-0.08145476, -0.7904468, -3.18132, 0, 1, 0.8078431, 1,
-0.07982187, 1.059598, 0.4503331, 0, 1, 0.8156863, 1,
-0.07767848, 0.7121824, 0.1876415, 0, 1, 0.8196079, 1,
-0.07654158, 0.286748, -1.362021, 0, 1, 0.827451, 1,
-0.07079622, 0.508581, -1.384121, 0, 1, 0.8313726, 1,
-0.06394126, 0.7599067, -1.728194, 0, 1, 0.8392157, 1,
-0.0623936, 0.9558676, 0.7843695, 0, 1, 0.8431373, 1,
-0.0610263, 2.11135, 0.1588976, 0, 1, 0.8509804, 1,
-0.05981881, 0.9702373, 0.4051595, 0, 1, 0.854902, 1,
-0.05483764, 0.09553801, -2.200514, 0, 1, 0.8627451, 1,
-0.0548273, 1.296937, -1.653769, 0, 1, 0.8666667, 1,
-0.04905285, 0.669547, -0.6774637, 0, 1, 0.8745098, 1,
-0.04880848, -0.5542576, -3.807092, 0, 1, 0.8784314, 1,
-0.04674456, 0.7401711, 0.9484792, 0, 1, 0.8862745, 1,
-0.04497456, 0.1177558, -0.4464638, 0, 1, 0.8901961, 1,
-0.04481419, -1.253609, -3.993342, 0, 1, 0.8980392, 1,
-0.04088784, 1.181867, 1.377729, 0, 1, 0.9058824, 1,
-0.03292176, -0.4325537, -3.58982, 0, 1, 0.9098039, 1,
-0.03249968, 2.021695, -1.828289, 0, 1, 0.9176471, 1,
-0.03165462, -0.6843129, -2.43983, 0, 1, 0.9215686, 1,
-0.02626714, 1.398494, 0.8693712, 0, 1, 0.9294118, 1,
-0.02488645, -0.1795779, -2.380818, 0, 1, 0.9333333, 1,
-0.0198444, -0.1423852, -3.748794, 0, 1, 0.9411765, 1,
-0.019621, -0.575919, -4.296655, 0, 1, 0.945098, 1,
-0.01291378, 0.8155708, 1.139806, 0, 1, 0.9529412, 1,
-0.005044603, 0.4211881, 0.9422421, 0, 1, 0.9568627, 1,
-0.003379322, 0.2209627, 0.2352269, 0, 1, 0.9647059, 1,
-0.00166498, 2.236018, -0.327383, 0, 1, 0.9686275, 1,
0.009044074, 1.302242, 0.2147087, 0, 1, 0.9764706, 1,
0.01206929, 0.2564131, 0.2297859, 0, 1, 0.9803922, 1,
0.01700024, -2.327813, 1.792369, 0, 1, 0.9882353, 1,
0.01909101, -0.05448508, 4.461289, 0, 1, 0.9921569, 1,
0.02104849, -1.779805, 3.100771, 0, 1, 1, 1,
0.02941375, -0.09253929, 5.422482, 0, 0.9921569, 1, 1,
0.03495206, 0.6266502, -0.4469745, 0, 0.9882353, 1, 1,
0.03832666, 0.717221, -0.4410895, 0, 0.9803922, 1, 1,
0.03884649, -0.6021689, 3.541697, 0, 0.9764706, 1, 1,
0.04320304, 0.9008705, -0.3341261, 0, 0.9686275, 1, 1,
0.04447746, -1.045131, 3.672436, 0, 0.9647059, 1, 1,
0.04673402, 0.9520221, -0.8979803, 0, 0.9568627, 1, 1,
0.04673742, -0.6116674, 2.833712, 0, 0.9529412, 1, 1,
0.04839087, -0.8550098, 1.250655, 0, 0.945098, 1, 1,
0.05105942, -0.3078005, 2.381292, 0, 0.9411765, 1, 1,
0.05218695, 0.1479343, 0.531517, 0, 0.9333333, 1, 1,
0.05441035, 0.5129958, 1.475091, 0, 0.9294118, 1, 1,
0.05459321, 0.5370991, -0.2356481, 0, 0.9215686, 1, 1,
0.05567201, 0.7845246, -1.615614, 0, 0.9176471, 1, 1,
0.05830469, 0.8896099, -0.1217868, 0, 0.9098039, 1, 1,
0.05957788, 0.0318676, 2.101084, 0, 0.9058824, 1, 1,
0.06124609, 1.080416, 0.4405728, 0, 0.8980392, 1, 1,
0.06501958, 0.1514995, 0.6810772, 0, 0.8901961, 1, 1,
0.06516008, 0.5564216, -0.9710834, 0, 0.8862745, 1, 1,
0.06774008, -0.5002612, 2.44525, 0, 0.8784314, 1, 1,
0.06778645, -0.08763502, 0.794955, 0, 0.8745098, 1, 1,
0.0696618, -1.010397, 2.098579, 0, 0.8666667, 1, 1,
0.07211845, 1.13846, 1.613899, 0, 0.8627451, 1, 1,
0.07855194, 1.583874, -1.943844, 0, 0.854902, 1, 1,
0.08028543, -1.005238, 2.087858, 0, 0.8509804, 1, 1,
0.08071452, -0.3919511, 3.73979, 0, 0.8431373, 1, 1,
0.08200967, 0.161239, 0.2612608, 0, 0.8392157, 1, 1,
0.08470313, -1.100239, 3.452537, 0, 0.8313726, 1, 1,
0.08598165, -2.190252, 2.382201, 0, 0.827451, 1, 1,
0.08657583, -0.5947481, 1.471675, 0, 0.8196079, 1, 1,
0.08861252, 1.470734, 0.02687171, 0, 0.8156863, 1, 1,
0.09288058, -0.7251425, 4.118561, 0, 0.8078431, 1, 1,
0.09339472, 0.2251559, -0.544494, 0, 0.8039216, 1, 1,
0.09339983, 2.798271, -0.1345958, 0, 0.7960784, 1, 1,
0.09420321, 1.47234, -0.6312547, 0, 0.7882353, 1, 1,
0.09538492, -0.9829392, 2.852866, 0, 0.7843137, 1, 1,
0.09720863, 1.152133, 1.507159, 0, 0.7764706, 1, 1,
0.109334, -1.377251, 1.617999, 0, 0.772549, 1, 1,
0.1127683, 0.02117237, 0.8162939, 0, 0.7647059, 1, 1,
0.1159471, 0.1660123, 0.7476773, 0, 0.7607843, 1, 1,
0.1173163, -0.5305991, 3.595623, 0, 0.7529412, 1, 1,
0.1193601, 0.7142553, 0.2944025, 0, 0.7490196, 1, 1,
0.1202289, -0.1439346, 2.612555, 0, 0.7411765, 1, 1,
0.1240429, -0.6136262, 2.13775, 0, 0.7372549, 1, 1,
0.1302534, 0.4754017, 1.170818, 0, 0.7294118, 1, 1,
0.1338615, -0.4745064, 2.605271, 0, 0.7254902, 1, 1,
0.1411558, -0.6609925, 4.387336, 0, 0.7176471, 1, 1,
0.1434733, 1.284401, 0.8256482, 0, 0.7137255, 1, 1,
0.1453972, -0.1405743, 2.067047, 0, 0.7058824, 1, 1,
0.1505534, 1.000584, 0.3374909, 0, 0.6980392, 1, 1,
0.1553943, 1.606678, -0.1973454, 0, 0.6941177, 1, 1,
0.1555308, 1.534589, -0.4468508, 0, 0.6862745, 1, 1,
0.157514, -0.3930363, 1.067681, 0, 0.682353, 1, 1,
0.1577242, -1.04385, 2.477037, 0, 0.6745098, 1, 1,
0.1591929, -1.042209, 4.179595, 0, 0.6705883, 1, 1,
0.1592634, -0.01794695, 0.5239562, 0, 0.6627451, 1, 1,
0.1626321, -0.6944522, 2.818452, 0, 0.6588235, 1, 1,
0.1637948, 0.683526, 0.1738712, 0, 0.6509804, 1, 1,
0.1692606, -1.623229, 3.39373, 0, 0.6470588, 1, 1,
0.1695346, 0.02166863, 2.934255, 0, 0.6392157, 1, 1,
0.1732082, 0.483463, 0.6355653, 0, 0.6352941, 1, 1,
0.177791, 0.5170066, 0.479668, 0, 0.627451, 1, 1,
0.1801034, -0.9591505, 2.383252, 0, 0.6235294, 1, 1,
0.1801629, -0.6107696, 3.230237, 0, 0.6156863, 1, 1,
0.1852231, 0.6284479, -0.6339731, 0, 0.6117647, 1, 1,
0.1902242, -0.4297794, 2.793803, 0, 0.6039216, 1, 1,
0.1907266, -0.32033, 3.76297, 0, 0.5960785, 1, 1,
0.1919266, -0.8611838, 3.966795, 0, 0.5921569, 1, 1,
0.193822, -0.0591459, 3.295355, 0, 0.5843138, 1, 1,
0.1941535, -0.2592263, 0.2484041, 0, 0.5803922, 1, 1,
0.1954952, -0.5276119, 2.336195, 0, 0.572549, 1, 1,
0.2012863, -0.1710793, 3.221431, 0, 0.5686275, 1, 1,
0.2023221, 1.102883, -0.5265679, 0, 0.5607843, 1, 1,
0.2034055, -1.700599, 2.876624, 0, 0.5568628, 1, 1,
0.2158019, 0.2736247, 1.743772, 0, 0.5490196, 1, 1,
0.2169895, -0.5041618, 5.013321, 0, 0.5450981, 1, 1,
0.2177119, -0.6159305, 3.277567, 0, 0.5372549, 1, 1,
0.218675, -1.230495, 3.968557, 0, 0.5333334, 1, 1,
0.2202629, 0.4221038, 0.624306, 0, 0.5254902, 1, 1,
0.2223106, -2.206882, 3.187871, 0, 0.5215687, 1, 1,
0.2223265, -1.33978, 2.219652, 0, 0.5137255, 1, 1,
0.224406, -1.517141, 3.829382, 0, 0.509804, 1, 1,
0.2250096, 1.762207, -0.7224423, 0, 0.5019608, 1, 1,
0.2250793, -0.4588478, 3.784597, 0, 0.4941176, 1, 1,
0.2294937, 0.7648838, 0.9944369, 0, 0.4901961, 1, 1,
0.2299726, 1.834857, 1.213723, 0, 0.4823529, 1, 1,
0.2304186, -1.059277, 1.350312, 0, 0.4784314, 1, 1,
0.23596, 0.785806, 0.316068, 0, 0.4705882, 1, 1,
0.2363023, -1.371746, 3.375312, 0, 0.4666667, 1, 1,
0.2390265, 0.9710178, 0.1680206, 0, 0.4588235, 1, 1,
0.2433903, 0.2973153, -0.06948679, 0, 0.454902, 1, 1,
0.246723, 1.431574, 2.528978, 0, 0.4470588, 1, 1,
0.2472955, -0.4450093, 3.077058, 0, 0.4431373, 1, 1,
0.2474768, -2.374934, 4.087659, 0, 0.4352941, 1, 1,
0.2539041, 1.200207, 1.135846, 0, 0.4313726, 1, 1,
0.2556354, 1.15777, 1.701482, 0, 0.4235294, 1, 1,
0.2587891, -2.012762, 3.532294, 0, 0.4196078, 1, 1,
0.2590513, -1.024555, 2.717942, 0, 0.4117647, 1, 1,
0.2708801, 1.705766, -0.6916218, 0, 0.4078431, 1, 1,
0.2720287, 0.2604697, 1.274953, 0, 0.4, 1, 1,
0.2735844, -0.1753267, 1.374869, 0, 0.3921569, 1, 1,
0.2783495, 1.028482, 0.5423169, 0, 0.3882353, 1, 1,
0.2889143, -0.1749045, 0.8810517, 0, 0.3803922, 1, 1,
0.2922624, -1.250808, 2.809256, 0, 0.3764706, 1, 1,
0.2925932, 0.8228614, 0.6353365, 0, 0.3686275, 1, 1,
0.2957238, -0.404874, 1.980992, 0, 0.3647059, 1, 1,
0.2980042, -1.482348, 5.516907, 0, 0.3568628, 1, 1,
0.3009081, -2.297354, 0.7265344, 0, 0.3529412, 1, 1,
0.3009254, 0.08145283, 2.607359, 0, 0.345098, 1, 1,
0.3033769, -0.384127, 2.572242, 0, 0.3411765, 1, 1,
0.304983, -0.2186525, 0.679316, 0, 0.3333333, 1, 1,
0.3052855, 0.9741449, -0.2625148, 0, 0.3294118, 1, 1,
0.3127327, -1.025426, 2.882926, 0, 0.3215686, 1, 1,
0.3176703, -0.07882375, 1.927839, 0, 0.3176471, 1, 1,
0.3187481, -1.325893, 2.864139, 0, 0.3098039, 1, 1,
0.3218347, 1.294701, -1.222539, 0, 0.3058824, 1, 1,
0.323179, 0.7736911, -0.02187358, 0, 0.2980392, 1, 1,
0.3253885, 1.40081, 2.243374, 0, 0.2901961, 1, 1,
0.3275485, -0.2586576, 2.640567, 0, 0.2862745, 1, 1,
0.329445, 0.4876393, 0.5938846, 0, 0.2784314, 1, 1,
0.3311284, -1.547809, 3.452212, 0, 0.2745098, 1, 1,
0.3320369, -1.276383, 2.752529, 0, 0.2666667, 1, 1,
0.3328503, 0.005311012, 0.0333871, 0, 0.2627451, 1, 1,
0.3345534, 1.030123, 0.06255801, 0, 0.254902, 1, 1,
0.3346735, 0.2208247, -0.8001022, 0, 0.2509804, 1, 1,
0.3347946, 0.5998743, -0.846743, 0, 0.2431373, 1, 1,
0.34233, 0.00392981, 1.51219, 0, 0.2392157, 1, 1,
0.3452324, -0.7420864, 3.301255, 0, 0.2313726, 1, 1,
0.3515667, -0.9175304, 4.636216, 0, 0.227451, 1, 1,
0.3515858, 1.640112, 1.083451, 0, 0.2196078, 1, 1,
0.3517861, 2.979283, -0.2774582, 0, 0.2156863, 1, 1,
0.3555622, 0.8504694, -1.744174, 0, 0.2078431, 1, 1,
0.3563891, 1.554428, 0.7173033, 0, 0.2039216, 1, 1,
0.356541, 0.4369247, 0.6721689, 0, 0.1960784, 1, 1,
0.3571474, -0.7442459, 4.242527, 0, 0.1882353, 1, 1,
0.3575293, 1.296494, -0.2136661, 0, 0.1843137, 1, 1,
0.3576463, 0.3173674, 0.1182116, 0, 0.1764706, 1, 1,
0.3595352, -0.3965782, 1.381501, 0, 0.172549, 1, 1,
0.3627877, 0.3882457, -0.1051226, 0, 0.1647059, 1, 1,
0.3651111, 0.6073661, 0.970709, 0, 0.1607843, 1, 1,
0.381482, 0.8667743, 0.6279191, 0, 0.1529412, 1, 1,
0.3838699, 0.5900399, -1.147243, 0, 0.1490196, 1, 1,
0.3854428, 1.569984, -1.00212, 0, 0.1411765, 1, 1,
0.3858536, -0.8395494, 3.344123, 0, 0.1372549, 1, 1,
0.3864355, 1.085766, -0.4540426, 0, 0.1294118, 1, 1,
0.3883703, -1.041851, 5.190643, 0, 0.1254902, 1, 1,
0.3931036, 0.3095049, 2.02274, 0, 0.1176471, 1, 1,
0.3958766, 0.1479329, 2.215528, 0, 0.1137255, 1, 1,
0.3972349, -0.9040866, 3.45391, 0, 0.1058824, 1, 1,
0.4004058, 0.7727761, -0.09298023, 0, 0.09803922, 1, 1,
0.4045087, -1.311967, 1.907251, 0, 0.09411765, 1, 1,
0.4064349, 1.747552, 1.644893, 0, 0.08627451, 1, 1,
0.4066172, 0.07660627, 2.018492, 0, 0.08235294, 1, 1,
0.4076965, -0.2039593, -0.01968462, 0, 0.07450981, 1, 1,
0.4113756, 0.1343802, 1.04248, 0, 0.07058824, 1, 1,
0.4114357, -0.4610381, 0.6285846, 0, 0.0627451, 1, 1,
0.4122894, 0.7616508, 0.4553833, 0, 0.05882353, 1, 1,
0.4128219, 0.4840653, 2.00495, 0, 0.05098039, 1, 1,
0.4148462, -1.203968, 3.310016, 0, 0.04705882, 1, 1,
0.4174056, -0.04028793, 2.987437, 0, 0.03921569, 1, 1,
0.4220011, 0.3823957, 1.477475, 0, 0.03529412, 1, 1,
0.427821, 1.334729, 0.8203014, 0, 0.02745098, 1, 1,
0.4280074, 0.787515, 1.510398, 0, 0.02352941, 1, 1,
0.4297377, 0.198971, -0.1662662, 0, 0.01568628, 1, 1,
0.4316362, 0.9586383, 1.378717, 0, 0.01176471, 1, 1,
0.4323781, -0.05905549, 3.958996, 0, 0.003921569, 1, 1,
0.4356667, -0.6507819, 3.038668, 0.003921569, 0, 1, 1,
0.4409439, 0.1480641, 1.116232, 0.007843138, 0, 1, 1,
0.4413747, -1.788845, 3.182379, 0.01568628, 0, 1, 1,
0.4425055, -0.06560653, 2.41249, 0.01960784, 0, 1, 1,
0.4457206, -0.3110181, 4.193334, 0.02745098, 0, 1, 1,
0.4482112, 1.189596, 2.539805, 0.03137255, 0, 1, 1,
0.4501901, 1.102422, -0.579107, 0.03921569, 0, 1, 1,
0.4554328, -1.380439, 2.520571, 0.04313726, 0, 1, 1,
0.4554994, -0.6831191, 2.168366, 0.05098039, 0, 1, 1,
0.4556159, -0.5228176, 1.928028, 0.05490196, 0, 1, 1,
0.4585668, -1.291698, 3.211627, 0.0627451, 0, 1, 1,
0.4637255, 2.066351, -0.004621895, 0.06666667, 0, 1, 1,
0.4642024, -0.3717629, 2.22708, 0.07450981, 0, 1, 1,
0.4726669, -0.4900505, 3.074284, 0.07843138, 0, 1, 1,
0.4727702, -0.4520026, 2.301636, 0.08627451, 0, 1, 1,
0.4770986, -0.6553305, 3.675315, 0.09019608, 0, 1, 1,
0.4792413, 1.392733, -0.6859122, 0.09803922, 0, 1, 1,
0.4797347, -1.279721, 2.438782, 0.1058824, 0, 1, 1,
0.4877299, -1.358623, 1.953613, 0.1098039, 0, 1, 1,
0.4890317, 0.1605615, 1.987459, 0.1176471, 0, 1, 1,
0.4942115, 0.3698183, 1.229392, 0.1215686, 0, 1, 1,
0.4975642, 0.2677683, 2.030649, 0.1294118, 0, 1, 1,
0.5006189, -1.050668, 2.356169, 0.1333333, 0, 1, 1,
0.5010915, -0.7245467, 2.142669, 0.1411765, 0, 1, 1,
0.5061356, -0.1137958, 0.9023812, 0.145098, 0, 1, 1,
0.5184531, -0.6402063, 2.307739, 0.1529412, 0, 1, 1,
0.5194227, 2.129536, -0.6499588, 0.1568628, 0, 1, 1,
0.5264481, -0.6664268, 5.596352, 0.1647059, 0, 1, 1,
0.5286904, -0.06832469, 1.262916, 0.1686275, 0, 1, 1,
0.5393766, 0.7968581, -0.154563, 0.1764706, 0, 1, 1,
0.5507291, 0.5640343, 0.9869999, 0.1803922, 0, 1, 1,
0.5565591, -1.557304, 1.833256, 0.1882353, 0, 1, 1,
0.5574917, -1.063825, 3.144217, 0.1921569, 0, 1, 1,
0.5621306, 0.3849583, 0.6376474, 0.2, 0, 1, 1,
0.571119, -0.6961628, 3.412139, 0.2078431, 0, 1, 1,
0.5730755, 0.6182578, 0.6651175, 0.2117647, 0, 1, 1,
0.5750616, -2.224525, 2.584539, 0.2196078, 0, 1, 1,
0.5782176, 0.6546968, 0.4088605, 0.2235294, 0, 1, 1,
0.579757, 0.3392417, -0.4557294, 0.2313726, 0, 1, 1,
0.5801225, -0.1847407, 2.682243, 0.2352941, 0, 1, 1,
0.5811638, 1.117191, 0.3587458, 0.2431373, 0, 1, 1,
0.5862505, 0.5011646, 1.798699, 0.2470588, 0, 1, 1,
0.5862866, 0.04587646, 2.734573, 0.254902, 0, 1, 1,
0.5885993, -1.09113, 2.813269, 0.2588235, 0, 1, 1,
0.5890039, -0.8178984, 3.087412, 0.2666667, 0, 1, 1,
0.5897626, 0.3990802, 0.5415362, 0.2705882, 0, 1, 1,
0.5926197, -0.3881145, 4.160818, 0.2784314, 0, 1, 1,
0.5940107, 1.085714, 2.40658, 0.282353, 0, 1, 1,
0.5993012, 0.2691254, 0.2309744, 0.2901961, 0, 1, 1,
0.6016318, 0.5772437, 0.3614973, 0.2941177, 0, 1, 1,
0.6019553, 1.341618, 0.2280553, 0.3019608, 0, 1, 1,
0.602414, -1.015755, 2.511844, 0.3098039, 0, 1, 1,
0.6046087, -0.1490694, 0.8177056, 0.3137255, 0, 1, 1,
0.6067082, -0.5848258, 1.648625, 0.3215686, 0, 1, 1,
0.6079947, 0.5492386, 3.521084, 0.3254902, 0, 1, 1,
0.6156392, 1.715453, 2.116924, 0.3333333, 0, 1, 1,
0.6181099, -0.63361, 1.88733, 0.3372549, 0, 1, 1,
0.6205844, -1.069749, 3.429646, 0.345098, 0, 1, 1,
0.6214046, 0.7131546, 0.5887767, 0.3490196, 0, 1, 1,
0.6223137, 0.4277749, -0.3539971, 0.3568628, 0, 1, 1,
0.6233839, -0.2606629, 1.022743, 0.3607843, 0, 1, 1,
0.6248382, -0.176366, -0.4015134, 0.3686275, 0, 1, 1,
0.6264251, 0.2964673, 1.458446, 0.372549, 0, 1, 1,
0.6362135, -0.6324723, 1.612159, 0.3803922, 0, 1, 1,
0.6368054, -0.685777, 4.198045, 0.3843137, 0, 1, 1,
0.6391978, -0.1577649, 3.100101, 0.3921569, 0, 1, 1,
0.6399905, -0.6507239, 2.2789, 0.3960784, 0, 1, 1,
0.6484743, -0.1298317, 2.040753, 0.4039216, 0, 1, 1,
0.6501718, 0.6329297, 0.3199081, 0.4117647, 0, 1, 1,
0.6520759, -0.121308, -0.2088676, 0.4156863, 0, 1, 1,
0.6593961, 0.5839968, 0.7605543, 0.4235294, 0, 1, 1,
0.6601436, 1.470114, 0.9074391, 0.427451, 0, 1, 1,
0.6626678, -0.5177399, 2.982939, 0.4352941, 0, 1, 1,
0.6629011, 0.7062531, 1.961382, 0.4392157, 0, 1, 1,
0.6646577, 1.610101, -1.422009, 0.4470588, 0, 1, 1,
0.6648386, 1.36587, -0.5020999, 0.4509804, 0, 1, 1,
0.6654359, -0.358334, 2.848156, 0.4588235, 0, 1, 1,
0.6728315, 0.8589706, 2.36558, 0.4627451, 0, 1, 1,
0.677031, -0.8066456, 2.193635, 0.4705882, 0, 1, 1,
0.6855178, -0.7481725, 2.199064, 0.4745098, 0, 1, 1,
0.6898991, 0.1519909, 0.6148349, 0.4823529, 0, 1, 1,
0.6982337, 0.9105275, 0.3194984, 0.4862745, 0, 1, 1,
0.6991825, -0.1282343, 0.3833972, 0.4941176, 0, 1, 1,
0.7084576, -0.6077819, 1.964345, 0.5019608, 0, 1, 1,
0.7088754, -0.01251363, 2.431157, 0.5058824, 0, 1, 1,
0.7098451, -0.397633, 2.057463, 0.5137255, 0, 1, 1,
0.711823, -0.1985883, 2.539273, 0.5176471, 0, 1, 1,
0.7134149, 0.5856132, 1.206811, 0.5254902, 0, 1, 1,
0.7140071, -1.174992, 0.3784821, 0.5294118, 0, 1, 1,
0.7142087, -1.025126, 3.03617, 0.5372549, 0, 1, 1,
0.7165619, -0.1494736, 1.083271, 0.5411765, 0, 1, 1,
0.7190713, 0.8631954, 0.6580632, 0.5490196, 0, 1, 1,
0.7224059, 0.7754694, -1.215356, 0.5529412, 0, 1, 1,
0.7254566, -1.464727, 2.682121, 0.5607843, 0, 1, 1,
0.7333775, -0.939008, 1.169323, 0.5647059, 0, 1, 1,
0.735426, -1.421313, -0.1477972, 0.572549, 0, 1, 1,
0.7363474, -0.2684667, 1.042117, 0.5764706, 0, 1, 1,
0.7364636, -0.7006432, 2.065723, 0.5843138, 0, 1, 1,
0.7386662, 0.8120462, 0.44569, 0.5882353, 0, 1, 1,
0.7412976, 1.620351, 1.267774, 0.5960785, 0, 1, 1,
0.7417052, -0.06442431, 1.708996, 0.6039216, 0, 1, 1,
0.7424252, 0.06484162, 3.38499, 0.6078432, 0, 1, 1,
0.7427641, 0.6473124, 2.831218, 0.6156863, 0, 1, 1,
0.7496001, 0.1667722, 2.788516, 0.6196079, 0, 1, 1,
0.7531925, 0.2617265, 1.689847, 0.627451, 0, 1, 1,
0.7565337, 1.075747, -0.2775296, 0.6313726, 0, 1, 1,
0.7575761, 1.678655, 0.01695569, 0.6392157, 0, 1, 1,
0.757981, -0.8148386, 2.750436, 0.6431373, 0, 1, 1,
0.7645569, -0.1032875, 1.545105, 0.6509804, 0, 1, 1,
0.7646669, 1.347859, 1.800769, 0.654902, 0, 1, 1,
0.7697389, -0.9157403, 2.18872, 0.6627451, 0, 1, 1,
0.7797895, -0.7635844, 2.488471, 0.6666667, 0, 1, 1,
0.7860193, 0.6516501, -1.359479, 0.6745098, 0, 1, 1,
0.7876377, -0.2626083, 2.685816, 0.6784314, 0, 1, 1,
0.7892315, -2.022488, 2.330196, 0.6862745, 0, 1, 1,
0.7934678, 0.2381214, 0.1377987, 0.6901961, 0, 1, 1,
0.7958398, -0.3020465, 0.8647391, 0.6980392, 0, 1, 1,
0.7983878, -1.027663, 2.487582, 0.7058824, 0, 1, 1,
0.7991637, -0.09340861, 2.507359, 0.7098039, 0, 1, 1,
0.8003608, -0.8744119, 0.7357688, 0.7176471, 0, 1, 1,
0.8097668, -0.3826755, 3.183741, 0.7215686, 0, 1, 1,
0.8101232, -0.9759485, 3.745287, 0.7294118, 0, 1, 1,
0.814422, -1.231541, 3.328119, 0.7333333, 0, 1, 1,
0.8159904, 1.418628, 1.648757, 0.7411765, 0, 1, 1,
0.8163225, 1.528723, 0.7070161, 0.7450981, 0, 1, 1,
0.8282247, -0.760502, 2.500838, 0.7529412, 0, 1, 1,
0.84055, -0.255225, 0.4348913, 0.7568628, 0, 1, 1,
0.8471673, 0.005031932, 3.470464, 0.7647059, 0, 1, 1,
0.8485202, 1.854793, -0.01015981, 0.7686275, 0, 1, 1,
0.8496999, 1.007073, -0.1626783, 0.7764706, 0, 1, 1,
0.8556046, 0.8079992, 2.720686, 0.7803922, 0, 1, 1,
0.8626436, 0.3880748, 1.429694, 0.7882353, 0, 1, 1,
0.8648326, -0.509873, 1.136418, 0.7921569, 0, 1, 1,
0.8649521, -0.802292, 2.544398, 0.8, 0, 1, 1,
0.8703353, 2.179704, 0.6605577, 0.8078431, 0, 1, 1,
0.8751601, -0.3775094, 1.807552, 0.8117647, 0, 1, 1,
0.8771368, 0.3266158, 2.382301, 0.8196079, 0, 1, 1,
0.8776261, 0.1824818, 2.029331, 0.8235294, 0, 1, 1,
0.8789911, -0.7919573, 4.169865, 0.8313726, 0, 1, 1,
0.8816187, 0.3027847, 1.204155, 0.8352941, 0, 1, 1,
0.8837321, -1.376753, 3.141988, 0.8431373, 0, 1, 1,
0.8904416, 0.1752, 0.7157746, 0.8470588, 0, 1, 1,
0.8912826, -1.258734, 1.843633, 0.854902, 0, 1, 1,
0.8924621, -1.788919, 2.051347, 0.8588235, 0, 1, 1,
0.8948843, 0.07513086, 0.4591779, 0.8666667, 0, 1, 1,
0.9000522, -0.11395, -0.2955461, 0.8705882, 0, 1, 1,
0.904426, -0.7497355, 0.3816854, 0.8784314, 0, 1, 1,
0.9114405, -0.537724, 1.826482, 0.8823529, 0, 1, 1,
0.9119896, 3.111706, 0.9923554, 0.8901961, 0, 1, 1,
0.9170523, -0.296596, 3.103548, 0.8941177, 0, 1, 1,
0.9172096, 0.9989926, -0.6502731, 0.9019608, 0, 1, 1,
0.9208454, -1.317182, 3.460612, 0.9098039, 0, 1, 1,
0.9241608, -0.05279292, 3.684329, 0.9137255, 0, 1, 1,
0.9288864, -0.5250975, 0.5513981, 0.9215686, 0, 1, 1,
0.9391463, 1.410991, -0.417493, 0.9254902, 0, 1, 1,
0.9425129, -0.4207627, 4.162292, 0.9333333, 0, 1, 1,
0.9452402, 0.7923401, -0.5186404, 0.9372549, 0, 1, 1,
0.9477111, -0.8155935, 2.834039, 0.945098, 0, 1, 1,
0.9488044, -0.537768, 1.976828, 0.9490196, 0, 1, 1,
0.9495524, 1.215656, -0.3250437, 0.9568627, 0, 1, 1,
0.9496131, 0.7329666, 2.783293, 0.9607843, 0, 1, 1,
0.9531842, 0.7921531, 1.743576, 0.9686275, 0, 1, 1,
0.9565371, 0.4107123, 0.07543498, 0.972549, 0, 1, 1,
0.9614781, 0.1086503, 3.053196, 0.9803922, 0, 1, 1,
0.969575, -0.1983749, 0.7774493, 0.9843137, 0, 1, 1,
0.9709104, -1.375586, 1.936371, 0.9921569, 0, 1, 1,
0.9825982, 0.5091119, 0.6256247, 0.9960784, 0, 1, 1,
0.9851177, 1.724101, 0.8073437, 1, 0, 0.9960784, 1,
0.9861733, 0.2678856, 1.783419, 1, 0, 0.9882353, 1,
0.9920127, -2.277959, 2.260442, 1, 0, 0.9843137, 1,
0.9944171, -1.734813, 3.685831, 1, 0, 0.9764706, 1,
0.9986115, -0.8684049, 1.771273, 1, 0, 0.972549, 1,
1.003942, 1.320031, 0.6014292, 1, 0, 0.9647059, 1,
1.004462, 0.1479974, 1.637888, 1, 0, 0.9607843, 1,
1.008292, 0.3981189, 1.369788, 1, 0, 0.9529412, 1,
1.010434, -1.244562, 2.770515, 1, 0, 0.9490196, 1,
1.012842, 1.280877, 2.361857, 1, 0, 0.9411765, 1,
1.0157, -0.7134362, 2.611521, 1, 0, 0.9372549, 1,
1.021212, 0.004950232, 2.175097, 1, 0, 0.9294118, 1,
1.02393, 1.320682, 0.2442891, 1, 0, 0.9254902, 1,
1.025423, 0.2709677, 0.9567212, 1, 0, 0.9176471, 1,
1.030094, -0.3050508, 2.717938, 1, 0, 0.9137255, 1,
1.034156, -0.08372598, 2.035618, 1, 0, 0.9058824, 1,
1.039411, 1.159853, 1.607487, 1, 0, 0.9019608, 1,
1.041379, 0.238862, 1.554415, 1, 0, 0.8941177, 1,
1.042011, 0.8950515, 0.3822294, 1, 0, 0.8862745, 1,
1.043655, -1.148504, 1.552666, 1, 0, 0.8823529, 1,
1.049426, -2.033597, 2.851365, 1, 0, 0.8745098, 1,
1.05016, 1.344979, 2.49492, 1, 0, 0.8705882, 1,
1.074829, 0.7758042, 0.4319749, 1, 0, 0.8627451, 1,
1.07576, -1.378636, 1.869136, 1, 0, 0.8588235, 1,
1.0842, -1.343821, 1.254764, 1, 0, 0.8509804, 1,
1.086258, -0.04525762, 1.772833, 1, 0, 0.8470588, 1,
1.090559, 1.631509, -0.9632675, 1, 0, 0.8392157, 1,
1.107696, -0.7462182, 0.1851986, 1, 0, 0.8352941, 1,
1.115089, 0.238266, 0.7295182, 1, 0, 0.827451, 1,
1.121682, 0.09040037, 2.670251, 1, 0, 0.8235294, 1,
1.128038, 0.274038, 0.3015952, 1, 0, 0.8156863, 1,
1.138762, -0.6518133, 3.96434, 1, 0, 0.8117647, 1,
1.140281, -0.8161467, 3.713209, 1, 0, 0.8039216, 1,
1.14402, -0.7202312, 2.442792, 1, 0, 0.7960784, 1,
1.145479, 1.339063, -0.7972751, 1, 0, 0.7921569, 1,
1.150406, -2.241918, 4.291909, 1, 0, 0.7843137, 1,
1.153135, -1.068168, 1.292936, 1, 0, 0.7803922, 1,
1.154143, -1.056253, 2.602782, 1, 0, 0.772549, 1,
1.156095, -1.258375, 2.651707, 1, 0, 0.7686275, 1,
1.156451, 0.02285489, 3.340601, 1, 0, 0.7607843, 1,
1.159517, 0.3768272, 1.785618, 1, 0, 0.7568628, 1,
1.16177, 1.007673, 1.334835, 1, 0, 0.7490196, 1,
1.167476, 0.2249296, 2.818726, 1, 0, 0.7450981, 1,
1.18249, 1.540369, -0.5997701, 1, 0, 0.7372549, 1,
1.183124, 0.1665829, 0.04667661, 1, 0, 0.7333333, 1,
1.196692, 1.879082, 1.692012, 1, 0, 0.7254902, 1,
1.203768, 0.6946877, 0.03095528, 1, 0, 0.7215686, 1,
1.206036, -1.346244, 3.162327, 1, 0, 0.7137255, 1,
1.211793, 0.09801733, 1.298434, 1, 0, 0.7098039, 1,
1.213776, 0.6816937, 1.599954, 1, 0, 0.7019608, 1,
1.218591, -0.8236156, 1.759628, 1, 0, 0.6941177, 1,
1.221664, -2.260857, 0.7278852, 1, 0, 0.6901961, 1,
1.223676, -2.069903, 2.37786, 1, 0, 0.682353, 1,
1.223726, -1.125181, 3.110306, 1, 0, 0.6784314, 1,
1.22526, 0.30419, 1.206739, 1, 0, 0.6705883, 1,
1.232394, 0.2568232, 2.06575, 1, 0, 0.6666667, 1,
1.238546, -1.193533, -0.46142, 1, 0, 0.6588235, 1,
1.244653, -1.284162, 2.969184, 1, 0, 0.654902, 1,
1.247783, 0.07209167, 1.991375, 1, 0, 0.6470588, 1,
1.250813, -2.081697, 4.52764, 1, 0, 0.6431373, 1,
1.264144, -0.9318942, 1.413892, 1, 0, 0.6352941, 1,
1.273708, -0.8873606, 1.670667, 1, 0, 0.6313726, 1,
1.274378, 0.3752847, 1.723219, 1, 0, 0.6235294, 1,
1.274813, 0.2047893, -0.7351786, 1, 0, 0.6196079, 1,
1.275242, 1.160195, 1.127626, 1, 0, 0.6117647, 1,
1.278939, 1.366154, 1.235716, 1, 0, 0.6078432, 1,
1.279161, -1.419408, 2.912894, 1, 0, 0.6, 1,
1.283321, 2.007731, 0.2889565, 1, 0, 0.5921569, 1,
1.284855, -0.9014806, 2.891276, 1, 0, 0.5882353, 1,
1.289999, 1.455491, 0.6589308, 1, 0, 0.5803922, 1,
1.29, -0.2570791, 1.220116, 1, 0, 0.5764706, 1,
1.295355, -1.113645, 1.399655, 1, 0, 0.5686275, 1,
1.298994, -0.3598979, -0.2847272, 1, 0, 0.5647059, 1,
1.301311, 0.259072, 2.446207, 1, 0, 0.5568628, 1,
1.30312, 0.9808727, 1.658909, 1, 0, 0.5529412, 1,
1.303171, 0.4828959, 1.066357, 1, 0, 0.5450981, 1,
1.310836, 1.683329, 1.581346, 1, 0, 0.5411765, 1,
1.31108, -0.1326544, 2.10022, 1, 0, 0.5333334, 1,
1.320402, 0.733004, 0.1080048, 1, 0, 0.5294118, 1,
1.323178, 0.5275669, 1.170804, 1, 0, 0.5215687, 1,
1.324878, -0.1803564, 0.7436465, 1, 0, 0.5176471, 1,
1.333908, 0.6599739, 2.942089, 1, 0, 0.509804, 1,
1.350202, -0.2033982, -0.0237869, 1, 0, 0.5058824, 1,
1.36499, -1.699921, 2.393694, 1, 0, 0.4980392, 1,
1.371383, -1.310201, 2.726379, 1, 0, 0.4901961, 1,
1.371869, -1.20406, 1.439968, 1, 0, 0.4862745, 1,
1.376299, -0.2354478, 1.060836, 1, 0, 0.4784314, 1,
1.378306, 0.1821795, 0.3755883, 1, 0, 0.4745098, 1,
1.382357, 0.1232543, 1.243495, 1, 0, 0.4666667, 1,
1.383046, 0.0484792, 0.1329452, 1, 0, 0.4627451, 1,
1.388989, 1.016537, 1.290661, 1, 0, 0.454902, 1,
1.391333, 0.3463922, -0.5584871, 1, 0, 0.4509804, 1,
1.395942, 0.4901505, 1.587486, 1, 0, 0.4431373, 1,
1.396161, -0.1464379, 0.1594832, 1, 0, 0.4392157, 1,
1.415647, -0.2936496, 1.712578, 1, 0, 0.4313726, 1,
1.42597, 2.062106, -0.3985394, 1, 0, 0.427451, 1,
1.439309, 0.3376613, 0.4129198, 1, 0, 0.4196078, 1,
1.483252, 0.5293368, 1.361901, 1, 0, 0.4156863, 1,
1.511177, -0.2075969, -0.5788451, 1, 0, 0.4078431, 1,
1.520701, -0.5123276, 4.341491, 1, 0, 0.4039216, 1,
1.528113, -1.40169, 3.261873, 1, 0, 0.3960784, 1,
1.543583, 0.7053776, 0.799771, 1, 0, 0.3882353, 1,
1.558302, -0.9258178, 1.765789, 1, 0, 0.3843137, 1,
1.560893, -0.4324594, 1.752947, 1, 0, 0.3764706, 1,
1.563044, -0.654671, 2.93827, 1, 0, 0.372549, 1,
1.567935, 1.055689, 1.748151, 1, 0, 0.3647059, 1,
1.57761, -0.4912733, 0.931029, 1, 0, 0.3607843, 1,
1.578859, -0.1420315, 1.189026, 1, 0, 0.3529412, 1,
1.587076, 0.5836068, 0.9374604, 1, 0, 0.3490196, 1,
1.603437, -0.4698967, 3.016259, 1, 0, 0.3411765, 1,
1.644859, -2.123158, 3.511125, 1, 0, 0.3372549, 1,
1.646842, 0.7759938, 0.7168282, 1, 0, 0.3294118, 1,
1.655221, 0.2530193, 2.395925, 1, 0, 0.3254902, 1,
1.658052, -0.8621539, 4.201818, 1, 0, 0.3176471, 1,
1.664031, -0.04646412, 1.524129, 1, 0, 0.3137255, 1,
1.670974, -0.8842275, 3.797628, 1, 0, 0.3058824, 1,
1.67499, -0.7295113, 1.62067, 1, 0, 0.2980392, 1,
1.67781, 1.172041, 1.425097, 1, 0, 0.2941177, 1,
1.691136, 1.198829, 1.793632, 1, 0, 0.2862745, 1,
1.696607, -1.432879, 4.748689, 1, 0, 0.282353, 1,
1.70827, 0.6867153, -0.7699923, 1, 0, 0.2745098, 1,
1.724047, -0.4631184, 2.116606, 1, 0, 0.2705882, 1,
1.725773, -0.8481862, 2.182085, 1, 0, 0.2627451, 1,
1.726691, -0.2399298, 4.476498, 1, 0, 0.2588235, 1,
1.739514, 0.7574553, 1.219209, 1, 0, 0.2509804, 1,
1.739863, 1.361652, -0.4841153, 1, 0, 0.2470588, 1,
1.749478, -1.520443, 3.291497, 1, 0, 0.2392157, 1,
1.758009, -0.02998418, 1.836874, 1, 0, 0.2352941, 1,
1.767492, -0.0585458, -0.5947905, 1, 0, 0.227451, 1,
1.767566, -0.628755, 3.174954, 1, 0, 0.2235294, 1,
1.776776, -1.111207, 2.548423, 1, 0, 0.2156863, 1,
1.791137, 1.754794, 0.4846855, 1, 0, 0.2117647, 1,
1.792421, 0.09873727, 1.421054, 1, 0, 0.2039216, 1,
1.794126, 1.076757, 0.4224645, 1, 0, 0.1960784, 1,
1.830469, 0.396431, 2.138397, 1, 0, 0.1921569, 1,
1.852288, -0.1684952, 2.986723, 1, 0, 0.1843137, 1,
1.855095, 0.3274216, 0.5856889, 1, 0, 0.1803922, 1,
1.869216, 0.2535161, -0.02854602, 1, 0, 0.172549, 1,
1.869502, -0.2578579, 2.322539, 1, 0, 0.1686275, 1,
1.875387, -0.3261358, 0.6053901, 1, 0, 0.1607843, 1,
1.881627, -0.6010503, 2.425729, 1, 0, 0.1568628, 1,
1.89154, 0.8369356, 1.69458, 1, 0, 0.1490196, 1,
1.899545, -1.707219, 1.390472, 1, 0, 0.145098, 1,
1.905826, 2.476572, 0.081252, 1, 0, 0.1372549, 1,
1.940293, -0.3187639, 0.8999171, 1, 0, 0.1333333, 1,
1.940864, -1.391854, 3.455104, 1, 0, 0.1254902, 1,
1.947695, 0.339602, 3.759177, 1, 0, 0.1215686, 1,
1.955725, -1.176842, 2.35386, 1, 0, 0.1137255, 1,
1.982898, 1.047807, 0.7844298, 1, 0, 0.1098039, 1,
1.987527, -0.7509121, 3.545171, 1, 0, 0.1019608, 1,
2.033583, -1.671298, 2.425543, 1, 0, 0.09411765, 1,
2.038008, -0.8607879, 3.384688, 1, 0, 0.09019608, 1,
2.173916, 0.5844948, 1.174356, 1, 0, 0.08235294, 1,
2.207066, 0.251929, -0.2833448, 1, 0, 0.07843138, 1,
2.237061, -0.8840861, 2.832126, 1, 0, 0.07058824, 1,
2.26224, 0.5699599, 0.4517338, 1, 0, 0.06666667, 1,
2.266573, -1.132835, 2.681299, 1, 0, 0.05882353, 1,
2.342492, -0.05236486, 1.440976, 1, 0, 0.05490196, 1,
2.344747, 1.134032, 0.5391996, 1, 0, 0.04705882, 1,
2.375073, -0.6507841, 2.311028, 1, 0, 0.04313726, 1,
2.390301, 1.690016, 2.165089, 1, 0, 0.03529412, 1,
2.427741, 1.8221, 0.6546539, 1, 0, 0.03137255, 1,
2.620258, -0.4330123, 3.546283, 1, 0, 0.02352941, 1,
2.649158, -0.1035898, 1.911503, 1, 0, 0.01960784, 1,
2.929907, -0.8692203, 0.8631613, 1, 0, 0.01176471, 1,
3.40647, -0.8143915, 2.609863, 1, 0, 0.007843138, 1
]);
var buf6 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf6);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var mvMatLoc6 = gl.getUniformLocation(prog6,"mvMatrix");
var prMatLoc6 = gl.getUniformLocation(prog6,"prMatrix");
// ****** text object 8 ******
var prog8 = gl.createProgram();
gl.attachShader(prog8, getShader( gl, "testglvshader8" ));
gl.attachShader(prog8, getShader( gl, "testglfshader8" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog8, 0, "aPos");
gl.bindAttribLocation(prog8, 1, "aCol");
gl.linkProgram(prog8);
var texts = [
"x"
];
var texinfo = drawTextToCanvas(texts, 1);
var canvasX8 = texinfo.canvasX;
var canvasY8 = texinfo.canvasY;
var ofsLoc8 = gl.getAttribLocation(prog8, "aOfs");
var texture8 = gl.createTexture();
var texLoc8 = gl.getAttribLocation(prog8, "aTexcoord");
var sampler8 = gl.getUniformLocation(prog8,"uSampler");
handleLoadedTexture(texture8, document.getElementById("testgltextureCanvas"));
var v=new Float32Array([
0.227199, -4.44276, -8.006407, 0, -0.5, 0.5, 0.5,
0.227199, -4.44276, -8.006407, 1, -0.5, 0.5, 0.5,
0.227199, -4.44276, -8.006407, 1, 1.5, 0.5, 0.5,
0.227199, -4.44276, -8.006407, 0, 1.5, 0.5, 0.5
]);
for (var i=0; i<1; i++)
for (var j=0; j<4; j++) {
ind = 7*(4*i + j) + 3;
v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width;
v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height;
v[ind] *= texinfo.widths[i]/texinfo.canvasX;
v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip
- v[ind+1]*texinfo.textHeight)/texinfo.canvasY;
}
var f=new Uint16Array([
0, 1, 2, 0, 2, 3
]);
var buf8 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf8);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var ibuf8 = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf8);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW);
var mvMatLoc8 = gl.getUniformLocation(prog8,"mvMatrix");
var prMatLoc8 = gl.getUniformLocation(prog8,"prMatrix");
// ****** text object 9 ******
var prog9 = gl.createProgram();
gl.attachShader(prog9, getShader( gl, "testglvshader9" ));
gl.attachShader(prog9, getShader( gl, "testglfshader9" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog9, 0, "aPos");
gl.bindAttribLocation(prog9, 1, "aCol");
gl.linkProgram(prog9);
var texts = [
"y"
];
var texinfo = drawTextToCanvas(texts, 1);
var canvasX9 = texinfo.canvasX;
var canvasY9 = texinfo.canvasY;
var ofsLoc9 = gl.getAttribLocation(prog9, "aOfs");
var texture9 = gl.createTexture();
var texLoc9 = gl.getAttribLocation(prog9, "aTexcoord");
var sampler9 = gl.getUniformLocation(prog9,"uSampler");
handleLoadedTexture(texture9, document.getElementById("testgltextureCanvas"));
var v=new Float32Array([
-4.029845, -0.1180786, -8.006407, 0, -0.5, 0.5, 0.5,
-4.029845, -0.1180786, -8.006407, 1, -0.5, 0.5, 0.5,
-4.029845, -0.1180786, -8.006407, 1, 1.5, 0.5, 0.5,
-4.029845, -0.1180786, -8.006407, 0, 1.5, 0.5, 0.5
]);
for (var i=0; i<1; i++)
for (var j=0; j<4; j++) {
ind = 7*(4*i + j) + 3;
v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width;
v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height;
v[ind] *= texinfo.widths[i]/texinfo.canvasX;
v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip
- v[ind+1]*texinfo.textHeight)/texinfo.canvasY;
}
var f=new Uint16Array([
0, 1, 2, 0, 2, 3
]);
var buf9 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf9);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var ibuf9 = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf9);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW);
var mvMatLoc9 = gl.getUniformLocation(prog9,"mvMatrix");
var prMatLoc9 = gl.getUniformLocation(prog9,"prMatrix");
// ****** text object 10 ******
var prog10 = gl.createProgram();
gl.attachShader(prog10, getShader( gl, "testglvshader10" ));
gl.attachShader(prog10, getShader( gl, "testglfshader10" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog10, 0, "aPos");
gl.bindAttribLocation(prog10, 1, "aCol");
gl.linkProgram(prog10);
var texts = [
"z"
];
var texinfo = drawTextToCanvas(texts, 1);
var canvasX10 = texinfo.canvasX;
var canvasY10 = texinfo.canvasY;
var ofsLoc10 = gl.getAttribLocation(prog10, "aOfs");
var texture10 = gl.createTexture();
var texLoc10 = gl.getAttribLocation(prog10, "aTexcoord");
var sampler10 = gl.getUniformLocation(prog10,"uSampler");
handleLoadedTexture(texture10, document.getElementById("testgltextureCanvas"));
var v=new Float32Array([
-4.029845, -4.44276, -0.2192783, 0, -0.5, 0.5, 0.5,
-4.029845, -4.44276, -0.2192783, 1, -0.5, 0.5, 0.5,
-4.029845, -4.44276, -0.2192783, 1, 1.5, 0.5, 0.5,
-4.029845, -4.44276, -0.2192783, 0, 1.5, 0.5, 0.5
]);
for (var i=0; i<1; i++)
for (var j=0; j<4; j++) {
ind = 7*(4*i + j) + 3;
v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width;
v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height;
v[ind] *= texinfo.widths[i]/texinfo.canvasX;
v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip
- v[ind+1]*texinfo.textHeight)/texinfo.canvasY;
}
var f=new Uint16Array([
0, 1, 2, 0, 2, 3
]);
var buf10 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf10);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var ibuf10 = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf10);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW);
var mvMatLoc10 = gl.getUniformLocation(prog10,"mvMatrix");
var prMatLoc10 = gl.getUniformLocation(prog10,"prMatrix");
// ****** lines object 11 ******
var prog11 = gl.createProgram();
gl.attachShader(prog11, getShader( gl, "testglvshader11" ));
gl.attachShader(prog11, getShader( gl, "testglfshader11" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog11, 0, "aPos");
gl.bindAttribLocation(prog11, 1, "aCol");
gl.linkProgram(prog11);
var v=new Float32Array([
-2, -3.444757, -6.209377,
3, -3.444757, -6.209377,
-2, -3.444757, -6.209377,
-2, -3.61109, -6.508882,
-1, -3.444757, -6.209377,
-1, -3.61109, -6.508882,
0, -3.444757, -6.209377,
0, -3.61109, -6.508882,
1, -3.444757, -6.209377,
1, -3.61109, -6.508882,
2, -3.444757, -6.209377,
2, -3.61109, -6.508882,
3, -3.444757, -6.209377,
3, -3.61109, -6.508882
]);
var buf11 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf11);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var mvMatLoc11 = gl.getUniformLocation(prog11,"mvMatrix");
var prMatLoc11 = gl.getUniformLocation(prog11,"prMatrix");
// ****** text object 12 ******
var prog12 = gl.createProgram();
gl.attachShader(prog12, getShader( gl, "testglvshader12" ));
gl.attachShader(prog12, getShader( gl, "testglfshader12" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog12, 0, "aPos");
gl.bindAttribLocation(prog12, 1, "aCol");
gl.linkProgram(prog12);
var texts = [
"-2",
"-1",
"0",
"1",
"2",
"3"
];
var texinfo = drawTextToCanvas(texts, 1);
var canvasX12 = texinfo.canvasX;
var canvasY12 = texinfo.canvasY;
var ofsLoc12 = gl.getAttribLocation(prog12, "aOfs");
var texture12 = gl.createTexture();
var texLoc12 = gl.getAttribLocation(prog12, "aTexcoord");
var sampler12 = gl.getUniformLocation(prog12,"uSampler");
handleLoadedTexture(texture12, document.getElementById("testgltextureCanvas"));
var v=new Float32Array([
-2, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5,
-2, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5,
-2, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5,
-2, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5,
-1, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5,
-1, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5,
-1, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5,
-1, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5,
0, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5,
0, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5,
0, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5,
0, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5,
1, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5,
1, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5,
1, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5,
1, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5,
2, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5,
2, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5,
2, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5,
2, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5,
3, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5,
3, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5,
3, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5,
3, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5
]);
for (var i=0; i<6; i++)
for (var j=0; j<4; j++) {
ind = 7*(4*i + j) + 3;
v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width;
v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height;
v[ind] *= texinfo.widths[i]/texinfo.canvasX;
v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip
- v[ind+1]*texinfo.textHeight)/texinfo.canvasY;
}
var f=new Uint16Array([
0, 1, 2, 0, 2, 3,
4, 5, 6, 4, 6, 7,
8, 9, 10, 8, 10, 11,
12, 13, 14, 12, 14, 15,
16, 17, 18, 16, 18, 19,
20, 21, 22, 20, 22, 23
]);
var buf12 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf12);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var ibuf12 = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf12);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW);
var mvMatLoc12 = gl.getUniformLocation(prog12,"mvMatrix");
var prMatLoc12 = gl.getUniformLocation(prog12,"prMatrix");
// ****** lines object 13 ******
var prog13 = gl.createProgram();
gl.attachShader(prog13, getShader( gl, "testglvshader13" ));
gl.attachShader(prog13, getShader( gl, "testglfshader13" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog13, 0, "aPos");
gl.bindAttribLocation(prog13, 1, "aCol");
gl.linkProgram(prog13);
var v=new Float32Array([
-3.04745, -3, -6.209377,
-3.04745, 3, -6.209377,
-3.04745, -3, -6.209377,
-3.211183, -3, -6.508882,
-3.04745, -2, -6.209377,
-3.211183, -2, -6.508882,
-3.04745, -1, -6.209377,
-3.211183, -1, -6.508882,
-3.04745, 0, -6.209377,
-3.211183, 0, -6.508882,
-3.04745, 1, -6.209377,
-3.211183, 1, -6.508882,
-3.04745, 2, -6.209377,
-3.211183, 2, -6.508882,
-3.04745, 3, -6.209377,
-3.211183, 3, -6.508882
]);
var buf13 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf13);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var mvMatLoc13 = gl.getUniformLocation(prog13,"mvMatrix");
var prMatLoc13 = gl.getUniformLocation(prog13,"prMatrix");
// ****** text object 14 ******
var prog14 = gl.createProgram();
gl.attachShader(prog14, getShader( gl, "testglvshader14" ));
gl.attachShader(prog14, getShader( gl, "testglfshader14" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog14, 0, "aPos");
gl.bindAttribLocation(prog14, 1, "aCol");
gl.linkProgram(prog14);
var texts = [
"-3",
"-2",
"-1",
"0",
"1",
"2",
"3"
];
var texinfo = drawTextToCanvas(texts, 1);
var canvasX14 = texinfo.canvasX;
var canvasY14 = texinfo.canvasY;
var ofsLoc14 = gl.getAttribLocation(prog14, "aOfs");
var texture14 = gl.createTexture();
var texLoc14 = gl.getAttribLocation(prog14, "aTexcoord");
var sampler14 = gl.getUniformLocation(prog14,"uSampler");
handleLoadedTexture(texture14, document.getElementById("testgltextureCanvas"));
var v=new Float32Array([
-3.538648, -3, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, -3, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, -3, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, -3, -7.107892, 0, 1.5, 0.5, 0.5,
-3.538648, -2, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, -2, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, -2, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, -2, -7.107892, 0, 1.5, 0.5, 0.5,
-3.538648, -1, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, -1, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, -1, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, -1, -7.107892, 0, 1.5, 0.5, 0.5,
-3.538648, 0, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, 0, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, 0, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, 0, -7.107892, 0, 1.5, 0.5, 0.5,
-3.538648, 1, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, 1, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, 1, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, 1, -7.107892, 0, 1.5, 0.5, 0.5,
-3.538648, 2, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, 2, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, 2, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, 2, -7.107892, 0, 1.5, 0.5, 0.5,
-3.538648, 3, -7.107892, 0, -0.5, 0.5, 0.5,
-3.538648, 3, -7.107892, 1, -0.5, 0.5, 0.5,
-3.538648, 3, -7.107892, 1, 1.5, 0.5, 0.5,
-3.538648, 3, -7.107892, 0, 1.5, 0.5, 0.5
]);
for (var i=0; i<7; i++)
for (var j=0; j<4; j++) {
ind = 7*(4*i + j) + 3;
v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width;
v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height;
v[ind] *= texinfo.widths[i]/texinfo.canvasX;
v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip
- v[ind+1]*texinfo.textHeight)/texinfo.canvasY;
}
var f=new Uint16Array([
0, 1, 2, 0, 2, 3,
4, 5, 6, 4, 6, 7,
8, 9, 10, 8, 10, 11,
12, 13, 14, 12, 14, 15,
16, 17, 18, 16, 18, 19,
20, 21, 22, 20, 22, 23,
24, 25, 26, 24, 26, 27
]);
var buf14 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf14);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var ibuf14 = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf14);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW);
var mvMatLoc14 = gl.getUniformLocation(prog14,"mvMatrix");
var prMatLoc14 = gl.getUniformLocation(prog14,"prMatrix");
// ****** lines object 15 ******
var prog15 = gl.createProgram();
gl.attachShader(prog15, getShader( gl, "testglvshader15" ));
gl.attachShader(prog15, getShader( gl, "testglfshader15" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog15, 0, "aPos");
gl.bindAttribLocation(prog15, 1, "aCol");
gl.linkProgram(prog15);
var v=new Float32Array([
-3.04745, -3.444757, -6,
-3.04745, -3.444757, 4,
-3.04745, -3.444757, -6,
-3.211183, -3.61109, -6,
-3.04745, -3.444757, -4,
-3.211183, -3.61109, -4,
-3.04745, -3.444757, -2,
-3.211183, -3.61109, -2,
-3.04745, -3.444757, 0,
-3.211183, -3.61109, 0,
-3.04745, -3.444757, 2,
-3.211183, -3.61109, 2,
-3.04745, -3.444757, 4,
-3.211183, -3.61109, 4
]);
var buf15 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf15);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var mvMatLoc15 = gl.getUniformLocation(prog15,"mvMatrix");
var prMatLoc15 = gl.getUniformLocation(prog15,"prMatrix");
// ****** text object 16 ******
var prog16 = gl.createProgram();
gl.attachShader(prog16, getShader( gl, "testglvshader16" ));
gl.attachShader(prog16, getShader( gl, "testglfshader16" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog16, 0, "aPos");
gl.bindAttribLocation(prog16, 1, "aCol");
gl.linkProgram(prog16);
var texts = [
"-6",
"-4",
"-2",
"0",
"2",
"4"
];
var texinfo = drawTextToCanvas(texts, 1);
var canvasX16 = texinfo.canvasX;
var canvasY16 = texinfo.canvasY;
var ofsLoc16 = gl.getAttribLocation(prog16, "aOfs");
var texture16 = gl.createTexture();
var texLoc16 = gl.getAttribLocation(prog16, "aTexcoord");
var sampler16 = gl.getUniformLocation(prog16,"uSampler");
handleLoadedTexture(texture16, document.getElementById("testgltextureCanvas"));
var v=new Float32Array([
-3.538648, -3.943758, -6, 0, -0.5, 0.5, 0.5,
-3.538648, -3.943758, -6, 1, -0.5, 0.5, 0.5,
-3.538648, -3.943758, -6, 1, 1.5, 0.5, 0.5,
-3.538648, -3.943758, -6, 0, 1.5, 0.5, 0.5,
-3.538648, -3.943758, -4, 0, -0.5, 0.5, 0.5,
-3.538648, -3.943758, -4, 1, -0.5, 0.5, 0.5,
-3.538648, -3.943758, -4, 1, 1.5, 0.5, 0.5,
-3.538648, -3.943758, -4, 0, 1.5, 0.5, 0.5,
-3.538648, -3.943758, -2, 0, -0.5, 0.5, 0.5,
-3.538648, -3.943758, -2, 1, -0.5, 0.5, 0.5,
-3.538648, -3.943758, -2, 1, 1.5, 0.5, 0.5,
-3.538648, -3.943758, -2, 0, 1.5, 0.5, 0.5,
-3.538648, -3.943758, 0, 0, -0.5, 0.5, 0.5,
-3.538648, -3.943758, 0, 1, -0.5, 0.5, 0.5,
-3.538648, -3.943758, 0, 1, 1.5, 0.5, 0.5,
-3.538648, -3.943758, 0, 0, 1.5, 0.5, 0.5,
-3.538648, -3.943758, 2, 0, -0.5, 0.5, 0.5,
-3.538648, -3.943758, 2, 1, -0.5, 0.5, 0.5,
-3.538648, -3.943758, 2, 1, 1.5, 0.5, 0.5,
-3.538648, -3.943758, 2, 0, 1.5, 0.5, 0.5,
-3.538648, -3.943758, 4, 0, -0.5, 0.5, 0.5,
-3.538648, -3.943758, 4, 1, -0.5, 0.5, 0.5,
-3.538648, -3.943758, 4, 1, 1.5, 0.5, 0.5,
-3.538648, -3.943758, 4, 0, 1.5, 0.5, 0.5
]);
for (var i=0; i<6; i++)
for (var j=0; j<4; j++) {
ind = 7*(4*i + j) + 3;
v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width;
v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height;
v[ind] *= texinfo.widths[i]/texinfo.canvasX;
v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip
- v[ind+1]*texinfo.textHeight)/texinfo.canvasY;
}
var f=new Uint16Array([
0, 1, 2, 0, 2, 3,
4, 5, 6, 4, 6, 7,
8, 9, 10, 8, 10, 11,
12, 13, 14, 12, 14, 15,
16, 17, 18, 16, 18, 19,
20, 21, 22, 20, 22, 23
]);
var buf16 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf16);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var ibuf16 = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf16);
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW);
var mvMatLoc16 = gl.getUniformLocation(prog16,"mvMatrix");
var prMatLoc16 = gl.getUniformLocation(prog16,"prMatrix");
// ****** lines object 17 ******
var prog17 = gl.createProgram();
gl.attachShader(prog17, getShader( gl, "testglvshader17" ));
gl.attachShader(prog17, getShader( gl, "testglfshader17" ));
// Force aPos to location 0, aCol to location 1
gl.bindAttribLocation(prog17, 0, "aPos");
gl.bindAttribLocation(prog17, 1, "aCol");
gl.linkProgram(prog17);
var v=new Float32Array([
-3.04745, -3.444757, -6.209377,
-3.04745, 3.208599, -6.209377,
-3.04745, -3.444757, 5.770821,
-3.04745, 3.208599, 5.770821,
-3.04745, -3.444757, -6.209377,
-3.04745, -3.444757, 5.770821,
-3.04745, 3.208599, -6.209377,
-3.04745, 3.208599, 5.770821,
-3.04745, -3.444757, -6.209377,
3.501848, -3.444757, -6.209377,
-3.04745, -3.444757, 5.770821,
3.501848, -3.444757, 5.770821,
-3.04745, 3.208599, -6.209377,
3.501848, 3.208599, -6.209377,
-3.04745, 3.208599, 5.770821,
3.501848, 3.208599, 5.770821,
3.501848, -3.444757, -6.209377,
3.501848, 3.208599, -6.209377,
3.501848, -3.444757, 5.770821,
3.501848, 3.208599, 5.770821,
3.501848, -3.444757, -6.209377,
3.501848, -3.444757, 5.770821,
3.501848, 3.208599, -6.209377,
3.501848, 3.208599, 5.770821
]);
var buf17 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf17);
gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW);
var mvMatLoc17 = gl.getUniformLocation(prog17,"mvMatrix");
var prMatLoc17 = gl.getUniformLocation(prog17,"prMatrix");
gl.enable(gl.DEPTH_TEST);
gl.depthFunc(gl.LEQUAL);
gl.clearDepth(1.0);
gl.clearColor(1, 1, 1, 1);
var xOffs = yOffs = 0, drag = 0;
drawScene();
function drawScene(){
gl.depthMask(true);
gl.disable(gl.BLEND);
var radius = 8.110277;
var s = sin(fov*PI/360);
var t = tan(fov*PI/360);
var distance = radius/s;
var near = distance - radius;
var far = distance + radius;
var hlen = t*near;
var aspect = width/height;
prMatrix.makeIdentity();
if (aspect > 1)
prMatrix.frustum(-hlen*aspect*zoom, hlen*aspect*zoom,
-hlen*zoom, hlen*zoom, near, far);
else
prMatrix.frustum(-hlen*zoom, hlen*zoom,
-hlen*zoom/aspect, hlen*zoom/aspect,
near, far);
mvMatrix.makeIdentity();
mvMatrix.translate( -0.227199, 0.1180786, 0.2192783 );
mvMatrix.scale( 1.338921, 1.31798, 0.7319571 );
mvMatrix.multRight( userMatrix );
mvMatrix.translate(0, 0, -distance);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// ****** points object 6 *******
gl.useProgram(prog6);
gl.bindBuffer(gl.ARRAY_BUFFER, buf6);
gl.uniformMatrix4fv( prMatLoc6, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc6, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.enableVertexAttribArray( colLoc );
gl.vertexAttribPointer(colLoc, 4, gl.FLOAT, false, 28, 12);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawArrays(gl.POINTS, 0, 1000);
// ****** text object 8 *******
gl.useProgram(prog8);
gl.bindBuffer(gl.ARRAY_BUFFER, buf8);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf8);
gl.uniformMatrix4fv( prMatLoc8, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc8, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.enableVertexAttribArray( texLoc8 );
gl.vertexAttribPointer(texLoc8, 2, gl.FLOAT, false, 28, 12);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture8);
gl.uniform1i( sampler8, 0);
gl.enableVertexAttribArray( ofsLoc8 );
gl.vertexAttribPointer(ofsLoc8, 2, gl.FLOAT, false, 28, 20);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
// ****** text object 9 *******
gl.useProgram(prog9);
gl.bindBuffer(gl.ARRAY_BUFFER, buf9);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf9);
gl.uniformMatrix4fv( prMatLoc9, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc9, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.enableVertexAttribArray( texLoc9 );
gl.vertexAttribPointer(texLoc9, 2, gl.FLOAT, false, 28, 12);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture9);
gl.uniform1i( sampler9, 0);
gl.enableVertexAttribArray( ofsLoc9 );
gl.vertexAttribPointer(ofsLoc9, 2, gl.FLOAT, false, 28, 20);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
// ****** text object 10 *******
gl.useProgram(prog10);
gl.bindBuffer(gl.ARRAY_BUFFER, buf10);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf10);
gl.uniformMatrix4fv( prMatLoc10, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc10, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.enableVertexAttribArray( texLoc10 );
gl.vertexAttribPointer(texLoc10, 2, gl.FLOAT, false, 28, 12);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture10);
gl.uniform1i( sampler10, 0);
gl.enableVertexAttribArray( ofsLoc10 );
gl.vertexAttribPointer(ofsLoc10, 2, gl.FLOAT, false, 28, 20);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
// ****** lines object 11 *******
gl.useProgram(prog11);
gl.bindBuffer(gl.ARRAY_BUFFER, buf11);
gl.uniformMatrix4fv( prMatLoc11, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc11, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.lineWidth( 1 );
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0);
gl.drawArrays(gl.LINES, 0, 14);
// ****** text object 12 *******
gl.useProgram(prog12);
gl.bindBuffer(gl.ARRAY_BUFFER, buf12);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf12);
gl.uniformMatrix4fv( prMatLoc12, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc12, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.enableVertexAttribArray( texLoc12 );
gl.vertexAttribPointer(texLoc12, 2, gl.FLOAT, false, 28, 12);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture12);
gl.uniform1i( sampler12, 0);
gl.enableVertexAttribArray( ofsLoc12 );
gl.vertexAttribPointer(ofsLoc12, 2, gl.FLOAT, false, 28, 20);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0);
// ****** lines object 13 *******
gl.useProgram(prog13);
gl.bindBuffer(gl.ARRAY_BUFFER, buf13);
gl.uniformMatrix4fv( prMatLoc13, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc13, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.lineWidth( 1 );
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0);
gl.drawArrays(gl.LINES, 0, 16);
// ****** text object 14 *******
gl.useProgram(prog14);
gl.bindBuffer(gl.ARRAY_BUFFER, buf14);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf14);
gl.uniformMatrix4fv( prMatLoc14, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc14, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.enableVertexAttribArray( texLoc14 );
gl.vertexAttribPointer(texLoc14, 2, gl.FLOAT, false, 28, 12);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture14);
gl.uniform1i( sampler14, 0);
gl.enableVertexAttribArray( ofsLoc14 );
gl.vertexAttribPointer(ofsLoc14, 2, gl.FLOAT, false, 28, 20);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawElements(gl.TRIANGLES, 42, gl.UNSIGNED_SHORT, 0);
// ****** lines object 15 *******
gl.useProgram(prog15);
gl.bindBuffer(gl.ARRAY_BUFFER, buf15);
gl.uniformMatrix4fv( prMatLoc15, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc15, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.lineWidth( 1 );
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0);
gl.drawArrays(gl.LINES, 0, 14);
// ****** text object 16 *******
gl.useProgram(prog16);
gl.bindBuffer(gl.ARRAY_BUFFER, buf16);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf16);
gl.uniformMatrix4fv( prMatLoc16, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc16, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.enableVertexAttribArray( texLoc16 );
gl.vertexAttribPointer(texLoc16, 2, gl.FLOAT, false, 28, 12);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture16);
gl.uniform1i( sampler16, 0);
gl.enableVertexAttribArray( ofsLoc16 );
gl.vertexAttribPointer(ofsLoc16, 2, gl.FLOAT, false, 28, 20);
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0);
gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0);
// ****** lines object 17 *******
gl.useProgram(prog17);
gl.bindBuffer(gl.ARRAY_BUFFER, buf17);
gl.uniformMatrix4fv( prMatLoc17, false, new Float32Array(prMatrix.getAsArray()) );
gl.uniformMatrix4fv( mvMatLoc17, false, new Float32Array(mvMatrix.getAsArray()) );
gl.enableVertexAttribArray( posLoc );
gl.disableVertexAttribArray( colLoc );
gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 );
gl.lineWidth( 1 );
gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0);
gl.drawArrays(gl.LINES, 0, 24);
gl.flush ();
}
var vlen = function(v) {
return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2])
}
var xprod = function(a, b) {
return [a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0]];
}
var screenToVector = function(x, y) {
var radius = max(width, height)/2.0;
var cx = width/2.0;
var cy = height/2.0;
var px = (x-cx)/radius;
var py = (y-cy)/radius;
var plen = sqrt(px*px+py*py);
if (plen > 1.e-6) {
px = px/plen;
py = py/plen;
}
var angle = (SQRT2 - plen)/SQRT2*PI/2;
var z = sin(angle);
var zlen = sqrt(1.0 - z*z);
px = px * zlen;
py = py * zlen;
return [px, py, z];
}
var rotBase;
var trackballdown = function(x,y) {
rotBase = screenToVector(x, y);
saveMat.load(userMatrix);
}
var trackballmove = function(x,y) {
var rotCurrent = screenToVector(x,y);
var dot = rotBase[0]*rotCurrent[0] +
rotBase[1]*rotCurrent[1] +
rotBase[2]*rotCurrent[2];
var angle = acos( dot/vlen(rotBase)/vlen(rotCurrent) )*180./PI;
var axis = xprod(rotBase, rotCurrent);
userMatrix.load(saveMat);
userMatrix.rotate(angle, axis[0], axis[1], axis[2]);
drawScene();
}
var y0zoom = 0;
var zoom0 = 1;
var zoomdown = function(x, y) {
y0zoom = y;
zoom0 = log(zoom);
}
var zoommove = function(x, y) {
zoom = exp(zoom0 + (y-y0zoom)/height);
drawScene();
}
var y0fov = 0;
var fov0 = 1;
var fovdown = function(x, y) {
y0fov = y;
fov0 = fov;
}
var fovmove = function(x, y) {
fov = max(1, min(179, fov0 + 180*(y-y0fov)/height));
drawScene();
}
var mousedown = [trackballdown, zoomdown, fovdown];
var mousemove = [trackballmove, zoommove, fovmove];
function relMouseCoords(event){
var totalOffsetX = 0;
var totalOffsetY = 0;
var currentElement = canvas;
do{
totalOffsetX += currentElement.offsetLeft;
totalOffsetY += currentElement.offsetTop;
}
while(currentElement = currentElement.offsetParent)
var canvasX = event.pageX - totalOffsetX;
var canvasY = event.pageY - totalOffsetY;
return {x:canvasX, y:canvasY}
}
canvas.onmousedown = function ( ev ){
if (!ev.which) // Use w3c defns in preference to MS
switch (ev.button) {
case 0: ev.which = 1; break;
case 1:
case 4: ev.which = 2; break;
case 2: ev.which = 3;
}
drag = ev.which;
var f = mousedown[drag-1];
if (f) {
var coords = relMouseCoords(ev);
f(coords.x, height-coords.y);
ev.preventDefault();
}
}
canvas.onmouseup = function ( ev ){
drag = 0;
}
canvas.onmouseout = canvas.onmouseup;
canvas.onmousemove = function ( ev ){
if ( drag == 0 ) return;
var f = mousemove[drag-1];
if (f) {
var coords = relMouseCoords(ev);
f(coords.x, height-coords.y);
}
}
var wheelHandler = function(ev) {
var del = 1.1;
if (ev.shiftKey) del = 1.01;
var ds = ((ev.detail || ev.wheelDelta) > 0) ? del : (1 / del);
zoom *= ds;
drawScene();
ev.preventDefault();
};
canvas.addEventListener("DOMMouseScroll", wheelHandler, false);
canvas.addEventListener("mousewheel", wheelHandler, false);
}
</script>
<p><canvas id="testglcanvas" width="1" height="1"></canvas> </p>
<p id="testgldebug">
<img src="data:image/png;base64,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9AAAkHAgegAASDgQPQAAJByIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICEA9EDAEDCgegBACDhQPQAAJBwIHoAAEg4ED0AACQciB4AABIORA8AAAkHogcAgIQD0QMAQMKB6AEAIOFA9AAAkHAgegAASDgQPQAAJByIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICEA9EDAEDCgegBACDhQPQAAJBwIHoAAEg4ED2oCt59993Jkyd/8skn8un27dsffvjhtWvXxntUAEQDRA+qgpaWlsMOO+zqq6+WTy+++OKjjjpKeR+AZAPRg2rhpZde6tSp0+LFi1955ZXOnTu/9dZbcR8RABEB0YMqglXk+/bte/jhh0+cODHuYwEgOiB6UEXs2LHjwAMPrK+vb29vj/tYAIgOiB5UEc8991yXLl1qa2vnz58f97EAEB0QPagWtm7desghh9x9990XXnjhkUce2dbWFvcRARARED2oFs4666wTTjihvb1927Ztn/70p0ePHh33EQEQERA9qAomT57cpUuXFStWyKd//OMf0YADqgeIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICEA9EDAEDCgegBACDhQPQAAJBwIHoAAEg4ED0AACQciB4AABIORA8AAAkHogcAgIQD0QMAQMKB6AEAIOFA9AAAkHAgegAASDgQPQAAJByIHgAAEg5EDwAACQeiBwCAhAPRAwBAwoHoAQAg4UD0AACQcCB6AABIOBA9AAAkHIgeAAASDkQPAAAJB6IHAICE8/8BVlSoe98zAm0AAAAASUVORK5CYII=" alt="testglsnapshot" width=505/><br>
You must enable Javascript to view this page properly.</p>
<script>testglwebGLStart();</script>
</article>
<!-- Presenter Notes -->
</slide>
<slide class="backdrop"></slide>
</slides>
<div class="pagination pagination-small" id='io2012-ptoc' style="display:none;">
<ul>
<li>
<a href="#" target="_self" rel='tooltip'
data-slide=1 title=''>
1
</a>
</li>
</ul>
</div> <!--[if IE]>
<script
src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js">
</script>
<script>CFInstall.check({mode: 'overlay'});</script>
<![endif]-->
</body>
<!-- Load Javascripts for Widgets -->
<!-- LOAD HIGHLIGHTER JS FILES -->
<script src="http://slidifylibraries2.googlecode.com/git/inst/libraries/highlighters/highlight.js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<!-- DONE LOADING HIGHLIGHTER JS FILES -->
</html>
title framework
RGL in Slidify
io2012
knit_hooks$set(webgl = hook_webgl)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x, y)
plot3d(x, y, z, col = rainbow(1000))
<script src="CanvasMatrix.js" type="text/javascript"></script>

testglsnapshot


Your browser does not support the HTML5 canvas element. <script id="testglvshader6" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; void main(void) { vPosition = mvMatrix * vec4(aPos, 1.); gl_Position = prMatrix * vPosition; gl_PointSize = 3.; vCol = aCol; } </script> <script id="testglfshader6" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; gl_FragColor = lighteffect; } </script> <script id="testglvshader8" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; attribute vec2 aTexcoord; varying vec2 vTexcoord; attribute vec2 aOfs; void main(void) { vCol = aCol; vTexcoord = aTexcoord; vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.); pos = pos/pos.w; gl_Position = pos + vec4(aOfs, 0.,0.); } </script> <script id="testglfshader8" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; varying vec2 vTexcoord; uniform sampler2D uSampler; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord); if (textureColor.a < 0.1) discard; else gl_FragColor = textureColor; } </script> <script id="testglvshader9" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; attribute vec2 aTexcoord; varying vec2 vTexcoord; attribute vec2 aOfs; void main(void) { vCol = aCol; vTexcoord = aTexcoord; vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.); pos = pos/pos.w; gl_Position = pos + vec4(aOfs, 0.,0.); } </script> <script id="testglfshader9" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; varying vec2 vTexcoord; uniform sampler2D uSampler; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord); if (textureColor.a < 0.1) discard; else gl_FragColor = textureColor; } </script> <script id="testglvshader10" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; attribute vec2 aTexcoord; varying vec2 vTexcoord; attribute vec2 aOfs; void main(void) { vCol = aCol; vTexcoord = aTexcoord; vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.); pos = pos/pos.w; gl_Position = pos + vec4(aOfs, 0.,0.); } </script> <script id="testglfshader10" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; varying vec2 vTexcoord; uniform sampler2D uSampler; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord); if (textureColor.a < 0.1) discard; else gl_FragColor = textureColor; } </script> <script id="testglvshader11" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; void main(void) { vPosition = mvMatrix * vec4(aPos, 1.); gl_Position = prMatrix * vPosition; vCol = aCol; } </script> <script id="testglfshader11" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; gl_FragColor = lighteffect; } </script> <script id="testglvshader12" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; attribute vec2 aTexcoord; varying vec2 vTexcoord; attribute vec2 aOfs; void main(void) { vCol = aCol; vTexcoord = aTexcoord; vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.); pos = pos/pos.w; gl_Position = pos + vec4(aOfs, 0.,0.); } </script> <script id="testglfshader12" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; varying vec2 vTexcoord; uniform sampler2D uSampler; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord); if (textureColor.a < 0.1) discard; else gl_FragColor = textureColor; } </script> <script id="testglvshader13" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; void main(void) { vPosition = mvMatrix * vec4(aPos, 1.); gl_Position = prMatrix * vPosition; vCol = aCol; } </script> <script id="testglfshader13" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; gl_FragColor = lighteffect; } </script> <script id="testglvshader14" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; attribute vec2 aTexcoord; varying vec2 vTexcoord; attribute vec2 aOfs; void main(void) { vCol = aCol; vTexcoord = aTexcoord; vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.); pos = pos/pos.w; gl_Position = pos + vec4(aOfs, 0.,0.); } </script> <script id="testglfshader14" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; varying vec2 vTexcoord; uniform sampler2D uSampler; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord); if (textureColor.a < 0.1) discard; else gl_FragColor = textureColor; } </script> <script id="testglvshader15" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; void main(void) { vPosition = mvMatrix * vec4(aPos, 1.); gl_Position = prMatrix * vPosition; vCol = aCol; } </script> <script id="testglfshader15" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; gl_FragColor = lighteffect; } </script> <script id="testglvshader16" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; attribute vec2 aTexcoord; varying vec2 vTexcoord; attribute vec2 aOfs; void main(void) { vCol = aCol; vTexcoord = aTexcoord; vec4 pos = prMatrix * mvMatrix * vec4(aPos, 1.); pos = pos/pos.w; gl_Position = pos + vec4(aOfs, 0.,0.); } </script> <script id="testglfshader16" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; varying vec2 vTexcoord; uniform sampler2D uSampler; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; vec4 textureColor = lighteffect*texture2D(uSampler, vTexcoord); if (textureColor.a < 0.1) discard; else gl_FragColor = textureColor; } </script> <script id="testglvshader17" type="x-shader/x-vertex"> attribute vec3 aPos; attribute vec4 aCol; uniform mat4 mvMatrix; uniform mat4 prMatrix; varying vec4 vCol; varying vec4 vPosition; void main(void) { vPosition = mvMatrix * vec4(aPos, 1.); gl_Position = prMatrix * vPosition; vCol = aCol; } </script> <script id="testglfshader17" type="x-shader/x-fragment"> #ifdef GL_ES precision highp float; #endif varying vec4 vCol; // carries alpha varying vec4 vPosition; void main(void) { vec4 colDiff = vCol; vec4 lighteffect = colDiff; gl_FragColor = lighteffect; } </script> <script type="text/javascript"> function getShader ( gl, id ){ var shaderScript = document.getElementById ( id ); var str = ""; var k = shaderScript.firstChild; while ( k ){ if ( k.nodeType == 3 ) str += k.textContent; k = k.nextSibling; } var shader; if ( shaderScript.type == "x-shader/x-fragment" ) shader = gl.createShader ( gl.FRAGMENT_SHADER ); else if ( shaderScript.type == "x-shader/x-vertex" ) shader = gl.createShader(gl.VERTEX_SHADER); else return null; gl.shaderSource(shader, str); gl.compileShader(shader); if (gl.getShaderParameter(shader, gl.COMPILE_STATUS) == 0) alert(gl.getShaderInfoLog(shader)); return shader; } var min = Math.min; var max = Math.max; var sqrt = Math.sqrt; var sin = Math.sin; var acos = Math.acos; var tan = Math.tan; var SQRT2 = Math.SQRT2; var PI = Math.PI; var log = Math.log; var exp = Math.exp; function testglwebGLStart() { var debug = function(msg) { document.getElementById("testgldebug").innerHTML = msg; } debug(""); var canvas = document.getElementById("testglcanvas"); if (!window.WebGLRenderingContext){ debug("

\"testglsnapshot\"


Your browser does not support WebGL. See http://get.webgl.org"); return; } var gl; try { // Try to grab the standard context. If it fails, fallback to experimental. gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); } catch(e) {} if ( !gl ) { debug("

\"testglsnapshot\"


Your browser appears to support WebGL, but did not create a WebGL context. See http://get.webgl.org"); return; } var width = 505; var height = 505; canvas.width = width; canvas.height = height; gl.viewport(0, 0, width, height); var prMatrix = new CanvasMatrix4(); var mvMatrix = new CanvasMatrix4(); var normMatrix = new CanvasMatrix4(); var saveMat = new CanvasMatrix4(); saveMat.makeIdentity(); var distance; var posLoc = 0; var colLoc = 1; var zoom = 1; var fov = 30; var userMatrix = new CanvasMatrix4(); userMatrix.load([ 1, 0, 0, 0, 0, 0.3420201, -0.9396926, 0, 0, 0.9396926, 0.3420201, 0, 0, 0, 0, 1 ]); function getPowerOfTwo(value) { var pow = 1; while(pow canvasX) ? widths[i] : canvasX; } canvasX = getPowerOfTwo(canvasX); var offset = 2*textHeight; // offset to first baseline var skip = 2*textHeight; // skip between baselines canvasY = getPowerOfTwo(offset + text.length*skip); canvas.width = canvasX; canvas.height = canvasY; ctx.fillStyle = backgroundColour; ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height); ctx.fillStyle = textColour; ctx.textAlign = "left"; ctx.textBaseline = "alphabetic"; ctx.font = textHeight+"px "+fontFamily; for(var i = 0; i < text.length; i++) { textY = i*skip + offset; ctx.fillText(text[i], 0, textY); } return {canvasX:canvasX, canvasY:canvasY, widths:widths, textHeight:textHeight, offset:offset, skip:skip}; } // ****** points object 6 ****** var prog6 = gl.createProgram(); gl.attachShader(prog6, getShader( gl, "testglvshader6" )); gl.attachShader(prog6, getShader( gl, "testglfshader6" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog6, 0, "aPos"); gl.bindAttribLocation(prog6, 1, "aCol"); gl.linkProgram(prog6); var v=new Float32Array([ -2.952072, -0.2214677, -3.019845, 1, 0, 0, 1, -2.941993, 0.424547, -1.694011, 1, 0.007843138, 0, 1, -2.773294, -2.252316, -2.289618, 1, 0.01176471, 0, 1, -2.741154, 1.91224, -1.81119, 1, 0.01960784, 0, 1, -2.683521, -1.0161, -2.709061, 1, 0.02352941, 0, 1, -2.586437, -0.1779812, -1.750773, 1, 0.03137255, 0, 1, -2.505093, -0.8384189, -1.21044, 1, 0.03529412, 0, 1, -2.47568, 1.022213, -0.1225114, 1, 0.04313726, 0, 1, -2.449687, 0.390398, -1.7867, 1, 0.04705882, 0, 1, -2.427354, 0.5113504, -1.675239, 1, 0.05490196, 0, 1, -2.408303, 0.685719, -1.534938, 1, 0.05882353, 0, 1, -2.333889, -1.363672, -3.014697, 1, 0.06666667, 0, 1, -2.320272, 0.6390843, -2.03192, 1, 0.07058824, 0, 1, -2.293797, -0.9728975, -0.8808585, 1, 0.07843138, 0, 1, -2.290034, 0.9424326, -0.8609061, 1, 0.08235294, 0, 1, -2.230262, -0.8640178, -2.784488, 1, 0.09019608, 0, 1, -2.207447, -0.08595455, -1.174022, 1, 0.09411765, 0, 1, -2.196868, 1.203467, -2.14733, 1, 0.1019608, 0, 1, -2.194682, 0.4785337, -1.757936, 1, 0.1098039, 0, 1, -2.143002, -1.509105, -2.848423, 1, 0.1137255, 0, 1, -2.130312, 0.0452147, -1.561116, 1, 0.1215686, 0, 1, -2.120408, -0.07902917, -0.726055, 1, 0.1254902, 0, 1, -2.108011, 1.57415, 0.2559504, 1, 0.1333333, 0, 1, -2.055133, -1.333379, -3.044387, 1, 0.1372549, 0, 1, -2.048009, 0.1726251, -1.15378, 1, 0.145098, 0, 1, -2.045321, -0.8332573, -0.7500608, 1, 0.1490196, 0, 1, -2.040717, 0.6300246, -0.4821224, 1, 0.1568628, 0, 1, -2.019848, -0.04821175, -2.657281, 1, 0.1607843, 0, 1, -1.989051, -0.7783911, -0.6717636, 1, 0.1686275, 0, 1, -1.987562, 0.01574371, -1.442691, 1, 0.172549, 0, 1, -1.985878, 0.167875, -1.599388, 1, 0.1803922, 0, 1, -1.96489, -0.8479099, -2.52548, 1, 0.1843137, 0, 1, -1.917563, 1.405126, -0.07621464, 1, 0.1921569, 0, 1, -1.894118, -0.02416018, -2.182522, 1, 0.1960784, 0, 1, -1.888619, -0.1834365, -0.970643, 1, 0.2039216, 0, 1, -1.870354, 0.2195155, -0.1374444, 1, 0.2117647, 0, 1, -1.868238, -1.143964, -1.361275, 1, 0.2156863, 0, 1, -1.864886, -0.4624578, -0.9175287, 1, 0.2235294, 0, 1, -1.86376, 2.337708, 1.385323, 1, 0.227451, 0, 1, -1.829824, 0.02710315, -2.737106, 1, 0.2352941, 0, 1, -1.829525, -0.6056458, -1.833623, 1, 0.2392157, 0, 1, -1.826547, -0.7803, -3.590567, 1, 0.2470588, 0, 1, -1.825762, 0.9202921, -1.513501, 1, 0.2509804, 0, 1, -1.824154, -0.2455368, -1.287658, 1, 0.2588235, 0, 1, -1.79718, -1.030487, -0.9935387, 1, 0.2627451, 0, 1, -1.788661, -0.2359264, -2.571685, 1, 0.2705882, 0, 1, -1.724061, 0.5221362, -1.27853, 1, 0.2745098, 0, 1, -1.722944, 1.368938, -1.517243, 1, 0.282353, 0, 1, -1.712189, 0.97044, -1.368648, 1, 0.2862745, 0, 1, -1.7076, 0.7828088, -0.4968994, 1, 0.2941177, 0, 1, -1.69497, 0.7003319, -1.502948, 1, 0.3019608, 0, 1, -1.683397, 0.9535805, 0.600371, 1, 0.3058824, 0, 1, -1.68299, 1.582764, -1.418401, 1, 0.3137255, 0, 1, -1.682394, -0.5060902, -1.819227, 1, 0.3176471, 0, 1, -1.670441, -0.9899044, -1.587111, 1, 0.3254902, 0, 1, -1.645316, -0.7227786, -1.599769, 1, 0.3294118, 0, 1, -1.626048, -0.4348571, -1.185638, 1, 0.3372549, 0, 1, -1.606754, -0.04309671, 0.0281822, 1, 0.3411765, 0, 1, -1.60584, 0.9677173, -1.266711, 1, 0.3490196, 0, 1, -1.602026, 1.678376, -0.8808994, 1, 0.3529412, 0, 1, -1.596622, -0.08354389, -2.076109, 1, 0.3607843, 0, 1, -1.594318, -0.2166659, -0.9454827, 1, 0.3647059, 0, 1, -1.587558, 0.989337, -3.134423, 1, 0.372549, 0, 1, -1.587225, -1.21237, -0.6356904, 1, 0.3764706, 0, 1, -1.578633, 1.900588, -0.01173788, 1, 0.3843137, 0, 1, -1.578055, 0.7823086, -0.2371179, 1, 0.3882353, 0, 1, -1.568418, 2.168642, -0.9840981, 1, 0.3960784, 0, 1, -1.55603, -0.02704115, -1.332431, 1, 0.4039216, 0, 1, -1.535781, -0.4702654, -2.841969, 1, 0.4078431, 0, 1, -1.534673, -0.6663531, -1.057855, 1, 0.4156863, 0, 1, -1.517087, -0.8057835, -1.849693, 1, 0.4196078, 0, 1, -1.504068, 0.5749683, -2.170553, 1, 0.427451, 0, 1, -1.494269, 0.09998567, -1.482526, 1, 0.4313726, 0, 1, -1.48844, 1.305574, -1.543867, 1, 0.4392157, 0, 1, -1.482861, 0.6015305, -0.4522019, 1, 0.4431373, 0, 1, -1.472684, -0.4684885, -0.9835528, 1, 0.4509804, 0, 1, -1.469093, 0.7232445, -1.391796, 1, 0.454902, 0, 1, -1.462754, -1.453769, -1.857354, 1, 0.4627451, 0, 1, -1.445226, -0.2942193, -2.670498, 1, 0.4666667, 0, 1, -1.439802, 0.5376931, -2.533677, 1, 0.4745098, 0, 1, -1.439066, 0.6008725, -0.8929026, 1, 0.4784314, 0, 1, -1.42943, -0.766921, -2.26438, 1, 0.4862745, 0, 1, -1.429168, -1.50401, -3.165661, 1, 0.4901961, 0, 1, -1.409998, 0.09601423, -0.001234722, 1, 0.4980392, 0, 1, -1.407931, 1.478878, -1.773257, 1, 0.5058824, 0, 1, -1.394425, 0.7354687, -2.072405, 1, 0.509804, 0, 1, -1.383785, -0.4619713, -1.470014, 1, 0.5176471, 0, 1, -1.382702, 0.2958784, -1.097642, 1, 0.5215687, 0, 1, -1.382152, 0.3008618, -0.6442453, 1, 0.5294118, 0, 1, -1.380365, 0.4872535, 1.052903, 1, 0.5333334, 0, 1, -1.36634, -0.4739876, -2.453923, 1, 0.5411765, 0, 1, -1.3656, 0.3148347, -0.3395226, 1, 0.5450981, 0, 1, -1.365577, -1.295408, -2.702588, 1, 0.5529412, 0, 1, -1.365417, 1.012424, -1.35096, 1, 0.5568628, 0, 1, -1.360148, 0.2572357, -2.685012, 1, 0.5647059, 0, 1, -1.355001, -0.7861161, -3.481209, 1, 0.5686275, 0, 1, -1.336093, -0.525708, -1.622202, 1, 0.5764706, 0, 1, -1.332734, -0.2117367, -1.701391, 1, 0.5803922, 0, 1, -1.324501, -2.579236, -1.945515, 1, 0.5882353, 0, 1, -1.307581, 1.136318, 0.694268, 1, 0.5921569, 0, 1, -1.303883, 0.235269, -1.491952, 1, 0.6, 0, 1, -1.284772, 0.09900856, -1.607875, 1, 0.6078432, 0, 1, -1.278091, 0.550403, -0.1343196, 1, 0.6117647, 0, 1, -1.274961, 0.5438955, -0.9888135, 1, 0.6196079, 0, 1, -1.272876, -1.836948, -1.780786, 1, 0.6235294, 0, 1, -1.272242, 0.4610157, -2.04281, 1, 0.6313726, 0, 1, -1.261439, -0.2020016, -2.487752, 1, 0.6352941, 0, 1, -1.259698, 0.4290392, -0.3470646, 1, 0.6431373, 0, 1, -1.259223, 1.091094, -1.146262, 1, 0.6470588, 0, 1, -1.257528, 2.508492, 1.171067, 1, 0.654902, 0, 1, -1.252126, -0.194379, -2.064379, 1, 0.6588235, 0, 1, -1.244922, 2.472193, -2.160313, 1, 0.6666667, 0, 1, -1.238, 0.3430937, -0.6727452, 1, 0.6705883, 0, 1, -1.226254, -0.1156005, -1.402142, 1, 0.6784314, 0, 1, -1.225307, 0.5138997, -0.3392283, 1, 0.682353, 0, 1, -1.223021, -0.6144382, -4.281286, 1, 0.6901961, 0, 1, -1.21327, -0.1685617, -1.154597, 1, 0.6941177, 0, 1, -1.202067, -0.8114645, -3.538086, 1, 0.7019608, 0, 1, -1.199217, 0.8312968, -0.5121593, 1, 0.7098039, 0, 1, -1.19905, 1.106434, -0.6810963, 1, 0.7137255, 0, 1, -1.186804, -0.115044, -2.451418, 1, 0.7215686, 0, 1, -1.184956, 0.960358, -1.161691, 1, 0.7254902, 0, 1, -1.182071, 1.084633, -1.683325, 1, 0.7333333, 0, 1, -1.174797, -0.726693, -0.3591755, 1, 0.7372549, 0, 1, -1.169768, -1.281026, -0.5286845, 1, 0.7450981, 0, 1, -1.161777, 2.400038, -1.81159, 1, 0.7490196, 0, 1, -1.160292, 0.2110365, -2.804078, 1, 0.7568628, 0, 1, -1.15484, -0.5098254, -1.245082, 1, 0.7607843, 0, 1, -1.154353, 0.6865603, -1.348246, 1, 0.7686275, 0, 1, -1.14889, -1.495347, -0.9060023, 1, 0.772549, 0, 1, -1.147015, 0.7406764, -2.66545, 1, 0.7803922, 0, 1, -1.140017, 2.25393, -0.3394988, 1, 0.7843137, 0, 1, -1.139729, 2.116166, -1.831334, 1, 0.7921569, 0, 1, -1.138746, -1.144907, -1.264618, 1, 0.7960784, 0, 1, -1.137917, -1.338127, -3.051515, 1, 0.8039216, 0, 1, -1.137715, 1.563601, -0.2395362, 1, 0.8117647, 0, 1, -1.136109, 0.05792149, -3.280752, 1, 0.8156863, 0, 1, -1.131049, 0.03597917, -1.319257, 1, 0.8235294, 0, 1, -1.124196, -0.6959928, -0.9981425, 1, 0.827451, 0, 1, -1.122186, 2.185714, -0.8348395, 1, 0.8352941, 0, 1, -1.119682, -0.9030933, -3.610648, 1, 0.8392157, 0, 1, -1.111681, 0.6788838, -1.871205, 1, 0.8470588, 0, 1, -1.110984, 1.286329, -2.088835, 1, 0.8509804, 0, 1, -1.109825, -0.6160831, -3.224387, 1, 0.8588235, 0, 1, -1.107536, 0.6716356, -0.6965201, 1, 0.8627451, 0, 1, -1.105935, 0.4486714, -0.4260064, 1, 0.8705882, 0, 1, -1.091415, 1.051413, -2.031005, 1, 0.8745098, 0, 1, -1.079973, 0.2999201, 0.02011249, 1, 0.8823529, 0, 1, -1.075945, -0.04313045, -1.279903, 1, 0.8862745, 0, 1, -1.071169, -0.4646976, -2.521388, 1, 0.8941177, 0, 1, -1.070795, 2.449164, -1.163572, 1, 0.8980392, 0, 1, -1.068647, 1.231012, -0.05337533, 1, 0.9058824, 0, 1, -1.068622, 2.003875, 0.01871086, 1, 0.9137255, 0, 1, -1.059588, -1.319358, -4.329925, 1, 0.9176471, 0, 1, -1.056482, 1.296443, -0.6391521, 1, 0.9254902, 0, 1, -1.050229, 0.1273067, -2.255058, 1, 0.9294118, 0, 1, -1.048328, 0.3491593, 1.104307, 1, 0.9372549, 0, 1, -1.045739, 1.217726, -0.03983155, 1, 0.9411765, 0, 1, -1.039323, -0.1034171, 0.7803413, 1, 0.9490196, 0, 1, -1.037779, -0.6624163, -2.346845, 1, 0.9529412, 0, 1, -1.032037, -0.5432869, -2.761428, 1, 0.9607843, 0, 1, -1.022172, -0.7157797, -2.052552, 1, 0.9647059, 0, 1, -1.017052, 0.7271466, -1.772389, 1, 0.972549, 0, 1, -1.013411, -0.1547355, -1.495598, 1, 0.9764706, 0, 1, -1.011122, -0.2131106, -1.433876, 1, 0.9843137, 0, 1, -0.9943853, 1.712066, 1.142819, 1, 0.9882353, 0, 1, -0.9907827, -0.06295249, 0.4340695, 1, 0.9960784, 0, 1, -0.9872807, 1.260377, 0.8967608, 0.9960784, 1, 0, 1, -0.9861758, 0.7593516, 0.03968823, 0.9921569, 1, 0, 1, -0.9825948, 1.038902, -0.5270802, 0.9843137, 1, 0, 1, -0.982072, -0.1005354, -3.670372, 0.9803922, 1, 0, 1, -0.9805154, 0.7657207, -1.398373, 0.972549, 1, 0, 1, -0.9805078, -0.7093286, -4.132678, 0.9686275, 1, 0, 1, -0.9774836, -0.07165699, -1.778571, 0.9607843, 1, 0, 1, -0.968567, 1.216195, -1.455108, 0.9568627, 1, 0, 1, -0.9664513, -0.1950349, -2.343459, 0.9490196, 1, 0, 1, -0.964232, -1.411818, -3.658042, 0.945098, 1, 0, 1, -0.9584031, -1.799906, -1.651035, 0.9372549, 1, 0, 1, -0.9573254, -0.3188287, -0.6257594, 0.9333333, 1, 0, 1, -0.9503989, 0.8787079, -0.7875744, 0.9254902, 1, 0, 1, -0.9469922, -0.6270015, -3.328432, 0.9215686, 1, 0, 1, -0.9454874, 0.5311117, -1.432938, 0.9137255, 1, 0, 1, -0.9405314, 1.350968, -1.556772, 0.9098039, 1, 0, 1, -0.9397348, -0.3418904, -4.039907, 0.9019608, 1, 0, 1, -0.9328216, 0.1222576, 0.2314532, 0.8941177, 1, 0, 1, -0.9156438, 0.4141947, -2.243482, 0.8901961, 1, 0, 1, -0.9153265, -0.8391659, -3.496867, 0.8823529, 1, 0, 1, -0.9073144, 0.6333246, -2.649147, 0.8784314, 1, 0, 1, -0.9029736, 0.3459897, -3.403926, 0.8705882, 1, 0, 1, -0.9026194, 1.698885, -0.9570414, 0.8666667, 1, 0, 1, -0.9006733, -0.371772, -0.6053912, 0.8588235, 1, 0, 1, -0.8992302, -2.191268, -1.915156, 0.854902, 1, 0, 1, -0.8968864, -1.07954, -1.105069, 0.8470588, 1, 0, 1, -0.8944083, -2.465679, -3.236563, 0.8431373, 1, 0, 1, -0.8937457, 1.035335, -1.876912, 0.8352941, 1, 0, 1, -0.8894136, -1.463029, -2.677189, 0.8313726, 1, 0, 1, -0.8809638, 0.4487642, -1.707689, 0.8235294, 1, 0, 1, -0.8716294, 0.7511734, -0.3275216, 0.8196079, 1, 0, 1, -0.8699331, -0.9467522, -2.607056, 0.8117647, 1, 0, 1, -0.8695205, -1.354962, -1.514445, 0.8078431, 1, 0, 1, -0.8675485, -0.343391, -0.2768703, 0.8, 1, 0, 1, -0.8663142, -0.6837574, -1.84643, 0.7921569, 1, 0, 1, -0.8653257, 0.5272666, -1.10719, 0.7882353, 1, 0, 1, -0.854149, 0.07858349, -2.899263, 0.7803922, 1, 0, 1, -0.8496044, -0.1984344, -2.670213, 0.7764706, 1, 0, 1, -0.8352213, -1.158495, -2.447997, 0.7686275, 1, 0, 1, -0.8287078, -0.7839496, -2.422284, 0.7647059, 1, 0, 1, -0.8204087, 0.8388914, -2.487728, 0.7568628, 1, 0, 1, -0.8200579, 1.251559, -0.06959747, 0.7529412, 1, 0, 1, -0.8171641, -1.591484, -2.560895, 0.7450981, 1, 0, 1, -0.8151615, 0.4892646, 0.5015919, 0.7411765, 1, 0, 1, -0.8136763, 1.31604, -0.6453956, 0.7333333, 1, 0, 1, -0.8118364, -0.6951852, -2.757274, 0.7294118, 1, 0, 1, -0.8028432, -0.280429, -3.730121, 0.7215686, 1, 0, 1, -0.7938887, 0.1765896, -1.459251, 0.7176471, 1, 0, 1, -0.7931572, 0.9625944, -2.482344, 0.7098039, 1, 0, 1, -0.7925306, 1.043857, -1.710268, 0.7058824, 1, 0, 1, -0.7902551, 1.168457, -1.511305, 0.6980392, 1, 0, 1, -0.7879117, -0.4339956, -1.95698, 0.6901961, 1, 0, 1, -0.782855, -0.7803537, -1.981225, 0.6862745, 1, 0, 1, -0.7679511, -1.669931, -2.665724, 0.6784314, 1, 0, 1, -0.7573319, 0.02244568, -2.571121, 0.6745098, 1, 0, 1, -0.7506661, -0.3513085, -2.154407, 0.6666667, 1, 0, 1, -0.7481664, -0.636127, -1.453293, 0.6627451, 1, 0, 1, -0.7476972, -0.8049189, -1.97405, 0.654902, 1, 0, 1, -0.7472336, 0.4382182, 0.3645542, 0.6509804, 1, 0, 1, -0.7457134, 1.799914, -0.08401269, 0.6431373, 1, 0, 1, -0.7422929, -0.1130634, -0.2413792, 0.6392157, 1, 0, 1, -0.7335162, 1.169592, -0.9551185, 0.6313726, 1, 0, 1, -0.7307594, -0.2859268, -3.452493, 0.627451, 1, 0, 1, -0.7296641, -0.5969451, -2.14616, 0.6196079, 1, 0, 1, -0.7290528, 1.103952, -2.468522, 0.6156863, 1, 0, 1, -0.7285686, 0.8611033, -0.4861829, 0.6078432, 1, 0, 1, -0.7276863, 0.1402374, -0.5544298, 0.6039216, 1, 0, 1, -0.7225975, -0.2551185, -0.2522921, 0.5960785, 1, 0, 1, -0.7120798, 0.3643866, -2.051522, 0.5882353, 1, 0, 1, -0.7095784, 0.9027485, 0.1943288, 0.5843138, 1, 0, 1, -0.7064263, 0.6014298, 0.9467208, 0.5764706, 1, 0, 1, -0.7040495, 1.282108, -1.834462, 0.572549, 1, 0, 1, -0.6923751, 0.9262469, -1.129931, 0.5647059, 1, 0, 1, -0.6916713, -0.9258428, -2.859968, 0.5607843, 1, 0, 1, -0.6907132, -0.3908788, -2.343917, 0.5529412, 1, 0, 1, -0.6892564, 0.794014, -1.252074, 0.5490196, 1, 0, 1, -0.6864015, -0.4728993, -2.71472, 0.5411765, 1, 0, 1, -0.6848505, 2.33219, 0.4116175, 0.5372549, 1, 0, 1, -0.681336, 0.5754384, -1.197933, 0.5294118, 1, 0, 1, -0.6796325, 1.814438, -1.93693, 0.5254902, 1, 0, 1, -0.6782871, 0.6674304, -2.400679, 0.5176471, 1, 0, 1, -0.677919, 1.07739, -0.110497, 0.5137255, 1, 0, 1, -0.6723006, -0.7835825, -1.491591, 0.5058824, 1, 0, 1, -0.6714321, -0.3900415, -1.049517, 0.5019608, 1, 0, 1, -0.6689433, 0.5691403, -0.8910444, 0.4941176, 1, 0, 1, -0.6685745, -0.5514185, -1.231689, 0.4862745, 1, 0, 1, -0.6670567, -1.392809, -3.576702, 0.4823529, 1, 0, 1, -0.6643012, 0.9274381, 0.4734419, 0.4745098, 1, 0, 1, -0.6598572, 0.3897451, -1.14688, 0.4705882, 1, 0, 1, -0.6525954, 0.03516814, -1.768652, 0.4627451, 1, 0, 1, -0.6489615, 1.760559, -0.7994562, 0.4588235, 1, 0, 1, -0.647455, -0.8100634, -2.801702, 0.4509804, 1, 0, 1, -0.6462423, -0.1315998, -1.136848, 0.4470588, 1, 0, 1, -0.6432485, -0.08075248, -2.381537, 0.4392157, 1, 0, 1, -0.6413432, -1.91818, -2.336402, 0.4352941, 1, 0, 1, -0.6387789, -0.4077325, -1.372771, 0.427451, 1, 0, 1, -0.6375709, -0.700893, -4.142463, 0.4235294, 1, 0, 1, -0.6369945, -3.24565, -2.860122, 0.4156863, 1, 0, 1, -0.6325819, -1.004256, -1.652969, 0.4117647, 1, 0, 1, -0.6314489, -1.209096, -2.024427, 0.4039216, 1, 0, 1, -0.6302279, 0.5906739, 0.432087, 0.3960784, 1, 0, 1, -0.6298791, -0.3311491, 0.3837432, 0.3921569, 1, 0, 1, -0.6231918, -0.03238789, -0.7343976, 0.3843137, 1, 0, 1, -0.6210124, -1.777432, -3.84687, 0.3803922, 1, 0, 1, -0.6201745, 1.2284, -0.6468686, 0.372549, 1, 0, 1, -0.6181324, -1.240402, -2.841585, 0.3686275, 1, 0, 1, -0.6178383, 1.055207, -0.6962317, 0.3607843, 1, 0, 1, -0.613564, -0.8946884, -4.17686, 0.3568628, 1, 0, 1, -0.6090373, -0.6892626, -2.271461, 0.3490196, 1, 0, 1, -0.6070601, 0.1634304, -3.401842, 0.345098, 1, 0, 1, -0.6067012, 0.1071071, 1.364662, 0.3372549, 1, 0, 1, -0.6055592, -0.1477361, -1.844201, 0.3333333, 1, 0, 1, -0.6051491, -1.427357, -2.155674, 0.3254902, 1, 0, 1, -0.5954592, 0.9432967, -0.01317883, 0.3215686, 1, 0, 1, -0.5943538, -0.8075466, 0.4178461, 0.3137255, 1, 0, 1, -0.5928915, -1.166127, -1.455157, 0.3098039, 1, 0, 1, -0.5918809, 1.027194, -0.182586, 0.3019608, 1, 0, 1, -0.5813763, 1.069926, -0.6827145, 0.2941177, 1, 0, 1, -0.5716851, 0.002512995, -1.142244, 0.2901961, 1, 0, 1, -0.5716239, -0.2649691, -3.713245, 0.282353, 1, 0, 1, -0.5714072, -0.8586003, -1.002786, 0.2784314, 1, 0, 1, -0.5713909, 0.1565022, -0.9842624, 0.2705882, 1, 0, 1, -0.5713124, 0.3004626, -0.3790638, 0.2666667, 1, 0, 1, -0.5681065, -0.5840392, -3.848304, 0.2588235, 1, 0, 1, -0.5644956, 1.320793, 0.1484747, 0.254902, 1, 0, 1, -0.5628687, 1.21012, 0.007122288, 0.2470588, 1, 0, 1, -0.5583622, -3.315728, -3.857269, 0.2431373, 1, 0, 1, -0.5555913, -1.068211, -0.5390399, 0.2352941, 1, 0, 1, -0.5534164, 0.1316015, -0.5601313, 0.2313726, 1, 0, 1, -0.5525221, 0.7448058, -2.267992, 0.2235294, 1, 0, 1, -0.5487452, -0.04829736, -0.6494851, 0.2196078, 1, 0, 1, -0.5427365, 0.1721233, -1.341525, 0.2117647, 1, 0, 1, -0.5364569, -0.4519658, -2.103772, 0.2078431, 1, 0, 1, -0.5363923, 0.2624132, -1.076534, 0.2, 1, 0, 1, -0.5303519, 0.1178293, -1.153128, 0.1921569, 1, 0, 1, -0.5238888, 2.176602, 0.4239957, 0.1882353, 1, 0, 1, -0.5146596, 0.6115005, -0.4069919, 0.1803922, 1, 0, 1, -0.5073248, 0.1724239, -2.407949, 0.1764706, 1, 0, 1, -0.5071928, -0.5216237, -2.379085, 0.1686275, 1, 0, 1, -0.507123, 0.7020333, 0.4399352, 0.1647059, 1, 0, 1, -0.5051492, 1.107044, -0.7410638, 0.1568628, 1, 0, 1, -0.4972166, -0.9833329, -2.043604, 0.1529412, 1, 0, 1, -0.4958894, -1.059271, -3.919214, 0.145098, 1, 0, 1, -0.4923497, 0.4838764, -1.767708, 0.1411765, 1, 0, 1, -0.4889366, -0.3108651, -4.222139, 0.1333333, 1, 0, 1, -0.4782925, -2.930064, -1.779766, 0.1294118, 1, 0, 1, -0.4767335, -0.3159468, -2.425076, 0.1215686, 1, 0, 1, -0.4748086, -0.02019463, -3.784583, 0.1176471, 1, 0, 1, -0.4726345, -0.7113029, -1.293113, 0.1098039, 1, 0, 1, -0.4715721, 0.6687865, -0.6620966, 0.1058824, 1, 0, 1, -0.4713562, 0.5815372, -2.311205, 0.09803922, 1, 0, 1, -0.464012, -1.367852, -2.870793, 0.09019608, 1, 0, 1, -0.4619595, -1.436926, -2.343121, 0.08627451, 1, 0, 1, -0.4603894, -1.409577, -3.159855, 0.07843138, 1, 0, 1, -0.4540121, 0.3396948, 0.578438, 0.07450981, 1, 0, 1, -0.4522051, 1.375837, 2.134279, 0.06666667, 1, 0, 1, -0.4492738, -0.2817011, -0.4820639, 0.0627451, 1, 0, 1, -0.4481122, -0.9129242, -2.874551, 0.05490196, 1, 0, 1, -0.4470749, 0.3814341, -1.137599, 0.05098039, 1, 0, 1, -0.4443349, -2.22127, -1.101861, 0.04313726, 1, 0, 1, -0.4427461, 0.5777826, -0.2816789, 0.03921569, 1, 0, 1, -0.4424335, 2.065258, 2.171774, 0.03137255, 1, 0, 1, -0.4393137, -1.341557, -2.698607, 0.02745098, 1, 0, 1, -0.4384849, -0.5134424, -2.587961, 0.01960784, 1, 0, 1, -0.4349882, -0.7640378, -3.319205, 0.01568628, 1, 0, 1, -0.4333546, -0.3123941, -2.998156, 0.007843138, 1, 0, 1, -0.4288439, -0.16782, -1.564729, 0.003921569, 1, 0, 1, -0.4278697, -0.3470798, -1.63524, 0, 1, 0.003921569, 1, -0.4236396, -1.273203, -2.652764, 0, 1, 0.01176471, 1, -0.4154451, 0.08380403, -2.643131, 0, 1, 0.01568628, 1, -0.4135748, -0.8384106, -3.572916, 0, 1, 0.02352941, 1, -0.4099361, 0.04529222, -2.534371, 0, 1, 0.02745098, 1, -0.4030625, -0.2000747, -1.562217, 0, 1, 0.03529412, 1, -0.4029484, -0.3524667, -3.049908, 0, 1, 0.03921569, 1, -0.4018896, 0.1643915, 0.2305654, 0, 1, 0.04705882, 1, -0.4004692, 0.6906044, 0.01166969, 0, 1, 0.05098039, 1, -0.393987, 0.4533261, 0.4465583, 0, 1, 0.05882353, 1, -0.3929509, 0.1016763, -1.819008, 0, 1, 0.0627451, 1, -0.3917049, 0.5556434, -1.345233, 0, 1, 0.07058824, 1, -0.3819703, -0.6502449, -2.010136, 0, 1, 0.07450981, 1, -0.3808239, 0.1208525, -1.01962, 0, 1, 0.08235294, 1, -0.3794548, 0.406722, -1.851965, 0, 1, 0.08627451, 1, -0.3793632, -0.5407692, -3.318827, 0, 1, 0.09411765, 1, -0.3780411, 0.6959127, -1.331347, 0, 1, 0.1019608, 1, -0.3754403, 2.140704, 1.05979, 0, 1, 0.1058824, 1, -0.3743875, -0.2309773, -3.099105, 0, 1, 0.1137255, 1, -0.3732539, -0.03161833, 0.04777619, 0, 1, 0.1176471, 1, -0.3686399, -1.104322, -2.997874, 0, 1, 0.1254902, 1, -0.3678722, -1.768109, -2.518285, 0, 1, 0.1294118, 1, -0.3617575, -1.276533, -0.9769378, 0, 1, 0.1372549, 1, -0.3617448, -1.301939, -2.972571, 0, 1, 0.1411765, 1, -0.3600556, -0.6689434, -2.431079, 0, 1, 0.1490196, 1, -0.3595341, 1.623125, 0.5463394, 0, 1, 0.1529412, 1, -0.357131, -0.8154444, -2.397709, 0, 1, 0.1607843, 1, -0.3523571, -0.347725, -1.922208, 0, 1, 0.1647059, 1, -0.3459724, -1.100256, -3.886407, 0, 1, 0.172549, 1, -0.3459285, 0.9425349, -0.4139636, 0, 1, 0.1764706, 1, -0.3415533, -0.4005133, -4.554255, 0, 1, 0.1843137, 1, -0.3390867, 0.03050414, -1.093108, 0, 1, 0.1882353, 1, -0.3363944, -0.4089517, -1.66762, 0, 1, 0.1960784, 1, -0.3356876, 0.9215645, 1.010847, 0, 1, 0.2039216, 1, -0.3355496, -3.347863, -4.009837, 0, 1, 0.2078431, 1, -0.3331297, 0.007176185, -0.251017, 0, 1, 0.2156863, 1, -0.328437, 1.909181, 0.2606099, 0, 1, 0.2196078, 1, -0.3255764, -0.3895511, -5.104709, 0, 1, 0.227451, 1, -0.3207122, -0.3637998, -1.963131, 0, 1, 0.2313726, 1, -0.319975, 0.1031527, -0.9971405, 0, 1, 0.2392157, 1, -0.3194291, -2.138723, -5.100375, 0, 1, 0.2431373, 1, -0.3155167, 0.9108273, 0.09591845, 0, 1, 0.2509804, 1, -0.3146338, -0.0717146, -1.963771, 0, 1, 0.254902, 1, -0.3130884, 0.5693047, -0.8578362, 0, 1, 0.2627451, 1, -0.3102593, -0.01114597, -0.3025097, 0, 1, 0.2666667, 1, -0.3093901, 0.08979359, -1.303872, 0, 1, 0.2745098, 1, -0.3054723, -1.067178, -4.772877, 0, 1, 0.2784314, 1, -0.3004324, 0.9151236, -0.6212106, 0, 1, 0.2862745, 1, -0.2990657, 0.778702, 0.9298334, 0, 1, 0.2901961, 1, -0.2960278, -2.329248, -0.2819417, 0, 1, 0.2980392, 1, -0.2933179, -1.726423, -2.763719, 0, 1, 0.3058824, 1, -0.2877569, 0.5824063, 1.532404, 0, 1, 0.3098039, 1, -0.287481, 0.0707852, -3.372499, 0, 1, 0.3176471, 1, -0.2823125, -0.4067275, -3.073661, 0, 1, 0.3215686, 1, -0.2806834, -1.520699, -1.550797, 0, 1, 0.3294118, 1, -0.2799704, 1.231594, 1.105826, 0, 1, 0.3333333, 1, -0.2767639, -0.01176268, 1.138872, 0, 1, 0.3411765, 1, -0.2731419, 2.316162, -0.02548914, 0, 1, 0.345098, 1, -0.2717732, -1.583815, -6.034908, 0, 1, 0.3529412, 1, -0.2713699, -1.473322, -3.86254, 0, 1, 0.3568628, 1, -0.2707267, 0.1390505, -1.02806, 0, 1, 0.3647059, 1, -0.2705508, -0.8990755, -3.138698, 0, 1, 0.3686275, 1, -0.2689405, 1.946902, -0.1235823, 0, 1, 0.3764706, 1, -0.2682269, -0.04261554, -0.5612246, 0, 1, 0.3803922, 1, -0.2656361, 1.294305, 0.7100304, 0, 1, 0.3882353, 1, -0.2650884, 0.6006091, 0.3917286, 0, 1, 0.3921569, 1, -0.2639566, 0.853242, -0.9342297, 0, 1, 0.4, 1, -0.2614456, 1.138353, -0.9740773, 0, 1, 0.4078431, 1, -0.2586696, -1.601035, -3.00169, 0, 1, 0.4117647, 1, -0.2572677, 0.9164099, 0.2658063, 0, 1, 0.4196078, 1, -0.2535778, -0.3549367, -2.523365, 0, 1, 0.4235294, 1, -0.2494086, 0.9666477, 0.3828886, 0, 1, 0.4313726, 1, -0.2482907, -1.476003, -3.881352, 0, 1, 0.4352941, 1, -0.2462286, -0.2496411, -2.638662, 0, 1, 0.4431373, 1, -0.2437153, 0.4847289, -0.5115471, 0, 1, 0.4470588, 1, -0.2409379, -0.666148, -1.772852, 0, 1, 0.454902, 1, -0.2399915, 0.3074091, -0.07607224, 0, 1, 0.4588235, 1, -0.2351624, -0.5102469, -2.207315, 0, 1, 0.4666667, 1, -0.2347225, -1.871315, -2.998741, 0, 1, 0.4705882, 1, -0.2343093, -0.3155825, -2.267859, 0, 1, 0.4784314, 1, -0.229999, 0.6537161, -0.5373682, 0, 1, 0.4823529, 1, -0.2271884, 0.4296626, -1.757412, 0, 1, 0.4901961, 1, -0.2237196, 0.4104041, 1.343656, 0, 1, 0.4941176, 1, -0.2204048, -0.8353804, -4.073349, 0, 1, 0.5019608, 1, -0.2182518, 0.3059334, -2.330369, 0, 1, 0.509804, 1, -0.2158681, -0.0838955, -3.705967, 0, 1, 0.5137255, 1, -0.2142206, -1.02621, -3.840436, 0, 1, 0.5215687, 1, -0.211968, -0.5561653, -2.076725, 0, 1, 0.5254902, 1, -0.2076492, 0.7180692, 0.5077131, 0, 1, 0.5333334, 1, -0.2074676, -1.417043, -1.080851, 0, 1, 0.5372549, 1, -0.2065675, -0.07369898, -1.607769, 0, 1, 0.5450981, 1, -0.202293, -1.333403, -3.110718, 0, 1, 0.5490196, 1, -0.2022738, 1.149055, 0.5826751, 0, 1, 0.5568628, 1, -0.1993033, -0.5426094, -2.811442, 0, 1, 0.5607843, 1, -0.1978139, 0.8761164, -0.4019873, 0, 1, 0.5686275, 1, -0.196297, 0.9295847, -0.420122, 0, 1, 0.572549, 1, -0.1954162, -0.33406, -2.957113, 0, 1, 0.5803922, 1, -0.1930268, -0.3329388, -1.49573, 0, 1, 0.5843138, 1, -0.1867415, -0.3738241, -2.464917, 0, 1, 0.5921569, 1, -0.1840653, -0.1817566, -3.623565, 0, 1, 0.5960785, 1, -0.1835894, -0.9132759, -4.317578, 0, 1, 0.6039216, 1, -0.182916, -0.3526671, -2.466971, 0, 1, 0.6117647, 1, -0.1819197, -0.6558659, -2.824616, 0, 1, 0.6156863, 1, -0.1817009, -0.1354536, -2.230595, 0, 1, 0.6235294, 1, -0.175114, -0.4190194, -2.527413, 0, 1, 0.627451, 1, -0.1747816, -1.228725, -0.6664209, 0, 1, 0.6352941, 1, -0.1740428, -0.02333271, -1.41781, 0, 1, 0.6392157, 1, -0.1737445, -2.379715, -3.290058, 0, 1, 0.6470588, 1, -0.1697243, 0.5682441, 0.2012258, 0, 1, 0.6509804, 1, -0.1666334, -0.5992659, -1.620578, 0, 1, 0.6588235, 1, -0.1658657, -0.2856114, -2.680156, 0, 1, 0.6627451, 1, -0.1622979, 0.6648468, 0.5064943, 0, 1, 0.6705883, 1, -0.1604176, -0.06366231, -1.242382, 0, 1, 0.6745098, 1, -0.1483945, 0.7009889, -0.3884372, 0, 1, 0.682353, 1, -0.1478137, 0.8667023, 0.2244923, 0, 1, 0.6862745, 1, -0.1454613, -0.7217216, -3.791184, 0, 1, 0.6941177, 1, -0.1412155, 0.6874224, -1.154335, 0, 1, 0.7019608, 1, -0.1405468, -0.4154827, -1.079747, 0, 1, 0.7058824, 1, -0.1363773, -0.8807688, -2.844656, 0, 1, 0.7137255, 1, -0.1349164, -0.1787988, -4.477698, 0, 1, 0.7176471, 1, -0.1343246, 1.561271, -0.721509, 0, 1, 0.7254902, 1, -0.1281585, -0.1259721, -2.821643, 0, 1, 0.7294118, 1, -0.126766, -0.4031541, -2.941869, 0, 1, 0.7372549, 1, -0.1251716, -0.6890547, -4.489377, 0, 1, 0.7411765, 1, -0.1241039, 0.9248794, 0.08351666, 0, 1, 0.7490196, 1, -0.1222318, 0.5517559, 1.05794, 0, 1, 0.7529412, 1, -0.1152827, -0.1622503, -2.078199, 0, 1, 0.7607843, 1, -0.1140199, 0.6321118, 0.4657196, 0, 1, 0.7647059, 1, -0.1122962, -0.9087024, -2.929593, 0, 1, 0.772549, 1, -0.1104475, -0.8804581, -3.258203, 0, 1, 0.7764706, 1, -0.1072984, 0.3698506, -0.6540141, 0, 1, 0.7843137, 1, -0.09962191, 0.3276653, -0.1791232, 0, 1, 0.7882353, 1, -0.08846764, -0.2304984, -2.870246, 0, 1, 0.7960784, 1, -0.08388051, 0.6860718, -0.02155858, 0, 1, 0.8039216, 1, -0.08145476, -0.7904468, -3.18132, 0, 1, 0.8078431, 1, -0.07982187, 1.059598, 0.4503331, 0, 1, 0.8156863, 1, -0.07767848, 0.7121824, 0.1876415, 0, 1, 0.8196079, 1, -0.07654158, 0.286748, -1.362021, 0, 1, 0.827451, 1, -0.07079622, 0.508581, -1.384121, 0, 1, 0.8313726, 1, -0.06394126, 0.7599067, -1.728194, 0, 1, 0.8392157, 1, -0.0623936, 0.9558676, 0.7843695, 0, 1, 0.8431373, 1, -0.0610263, 2.11135, 0.1588976, 0, 1, 0.8509804, 1, -0.05981881, 0.9702373, 0.4051595, 0, 1, 0.854902, 1, -0.05483764, 0.09553801, -2.200514, 0, 1, 0.8627451, 1, -0.0548273, 1.296937, -1.653769, 0, 1, 0.8666667, 1, -0.04905285, 0.669547, -0.6774637, 0, 1, 0.8745098, 1, -0.04880848, -0.5542576, -3.807092, 0, 1, 0.8784314, 1, -0.04674456, 0.7401711, 0.9484792, 0, 1, 0.8862745, 1, -0.04497456, 0.1177558, -0.4464638, 0, 1, 0.8901961, 1, -0.04481419, -1.253609, -3.993342, 0, 1, 0.8980392, 1, -0.04088784, 1.181867, 1.377729, 0, 1, 0.9058824, 1, -0.03292176, -0.4325537, -3.58982, 0, 1, 0.9098039, 1, -0.03249968, 2.021695, -1.828289, 0, 1, 0.9176471, 1, -0.03165462, -0.6843129, -2.43983, 0, 1, 0.9215686, 1, -0.02626714, 1.398494, 0.8693712, 0, 1, 0.9294118, 1, -0.02488645, -0.1795779, -2.380818, 0, 1, 0.9333333, 1, -0.0198444, -0.1423852, -3.748794, 0, 1, 0.9411765, 1, -0.019621, -0.575919, -4.296655, 0, 1, 0.945098, 1, -0.01291378, 0.8155708, 1.139806, 0, 1, 0.9529412, 1, -0.005044603, 0.4211881, 0.9422421, 0, 1, 0.9568627, 1, -0.003379322, 0.2209627, 0.2352269, 0, 1, 0.9647059, 1, -0.00166498, 2.236018, -0.327383, 0, 1, 0.9686275, 1, 0.009044074, 1.302242, 0.2147087, 0, 1, 0.9764706, 1, 0.01206929, 0.2564131, 0.2297859, 0, 1, 0.9803922, 1, 0.01700024, -2.327813, 1.792369, 0, 1, 0.9882353, 1, 0.01909101, -0.05448508, 4.461289, 0, 1, 0.9921569, 1, 0.02104849, -1.779805, 3.100771, 0, 1, 1, 1, 0.02941375, -0.09253929, 5.422482, 0, 0.9921569, 1, 1, 0.03495206, 0.6266502, -0.4469745, 0, 0.9882353, 1, 1, 0.03832666, 0.717221, -0.4410895, 0, 0.9803922, 1, 1, 0.03884649, -0.6021689, 3.541697, 0, 0.9764706, 1, 1, 0.04320304, 0.9008705, -0.3341261, 0, 0.9686275, 1, 1, 0.04447746, -1.045131, 3.672436, 0, 0.9647059, 1, 1, 0.04673402, 0.9520221, -0.8979803, 0, 0.9568627, 1, 1, 0.04673742, -0.6116674, 2.833712, 0, 0.9529412, 1, 1, 0.04839087, -0.8550098, 1.250655, 0, 0.945098, 1, 1, 0.05105942, -0.3078005, 2.381292, 0, 0.9411765, 1, 1, 0.05218695, 0.1479343, 0.531517, 0, 0.9333333, 1, 1, 0.05441035, 0.5129958, 1.475091, 0, 0.9294118, 1, 1, 0.05459321, 0.5370991, -0.2356481, 0, 0.9215686, 1, 1, 0.05567201, 0.7845246, -1.615614, 0, 0.9176471, 1, 1, 0.05830469, 0.8896099, -0.1217868, 0, 0.9098039, 1, 1, 0.05957788, 0.0318676, 2.101084, 0, 0.9058824, 1, 1, 0.06124609, 1.080416, 0.4405728, 0, 0.8980392, 1, 1, 0.06501958, 0.1514995, 0.6810772, 0, 0.8901961, 1, 1, 0.06516008, 0.5564216, -0.9710834, 0, 0.8862745, 1, 1, 0.06774008, -0.5002612, 2.44525, 0, 0.8784314, 1, 1, 0.06778645, -0.08763502, 0.794955, 0, 0.8745098, 1, 1, 0.0696618, -1.010397, 2.098579, 0, 0.8666667, 1, 1, 0.07211845, 1.13846, 1.613899, 0, 0.8627451, 1, 1, 0.07855194, 1.583874, -1.943844, 0, 0.854902, 1, 1, 0.08028543, -1.005238, 2.087858, 0, 0.8509804, 1, 1, 0.08071452, -0.3919511, 3.73979, 0, 0.8431373, 1, 1, 0.08200967, 0.161239, 0.2612608, 0, 0.8392157, 1, 1, 0.08470313, -1.100239, 3.452537, 0, 0.8313726, 1, 1, 0.08598165, -2.190252, 2.382201, 0, 0.827451, 1, 1, 0.08657583, -0.5947481, 1.471675, 0, 0.8196079, 1, 1, 0.08861252, 1.470734, 0.02687171, 0, 0.8156863, 1, 1, 0.09288058, -0.7251425, 4.118561, 0, 0.8078431, 1, 1, 0.09339472, 0.2251559, -0.544494, 0, 0.8039216, 1, 1, 0.09339983, 2.798271, -0.1345958, 0, 0.7960784, 1, 1, 0.09420321, 1.47234, -0.6312547, 0, 0.7882353, 1, 1, 0.09538492, -0.9829392, 2.852866, 0, 0.7843137, 1, 1, 0.09720863, 1.152133, 1.507159, 0, 0.7764706, 1, 1, 0.109334, -1.377251, 1.617999, 0, 0.772549, 1, 1, 0.1127683, 0.02117237, 0.8162939, 0, 0.7647059, 1, 1, 0.1159471, 0.1660123, 0.7476773, 0, 0.7607843, 1, 1, 0.1173163, -0.5305991, 3.595623, 0, 0.7529412, 1, 1, 0.1193601, 0.7142553, 0.2944025, 0, 0.7490196, 1, 1, 0.1202289, -0.1439346, 2.612555, 0, 0.7411765, 1, 1, 0.1240429, -0.6136262, 2.13775, 0, 0.7372549, 1, 1, 0.1302534, 0.4754017, 1.170818, 0, 0.7294118, 1, 1, 0.1338615, -0.4745064, 2.605271, 0, 0.7254902, 1, 1, 0.1411558, -0.6609925, 4.387336, 0, 0.7176471, 1, 1, 0.1434733, 1.284401, 0.8256482, 0, 0.7137255, 1, 1, 0.1453972, -0.1405743, 2.067047, 0, 0.7058824, 1, 1, 0.1505534, 1.000584, 0.3374909, 0, 0.6980392, 1, 1, 0.1553943, 1.606678, -0.1973454, 0, 0.6941177, 1, 1, 0.1555308, 1.534589, -0.4468508, 0, 0.6862745, 1, 1, 0.157514, -0.3930363, 1.067681, 0, 0.682353, 1, 1, 0.1577242, -1.04385, 2.477037, 0, 0.6745098, 1, 1, 0.1591929, -1.042209, 4.179595, 0, 0.6705883, 1, 1, 0.1592634, -0.01794695, 0.5239562, 0, 0.6627451, 1, 1, 0.1626321, -0.6944522, 2.818452, 0, 0.6588235, 1, 1, 0.1637948, 0.683526, 0.1738712, 0, 0.6509804, 1, 1, 0.1692606, -1.623229, 3.39373, 0, 0.6470588, 1, 1, 0.1695346, 0.02166863, 2.934255, 0, 0.6392157, 1, 1, 0.1732082, 0.483463, 0.6355653, 0, 0.6352941, 1, 1, 0.177791, 0.5170066, 0.479668, 0, 0.627451, 1, 1, 0.1801034, -0.9591505, 2.383252, 0, 0.6235294, 1, 1, 0.1801629, -0.6107696, 3.230237, 0, 0.6156863, 1, 1, 0.1852231, 0.6284479, -0.6339731, 0, 0.6117647, 1, 1, 0.1902242, -0.4297794, 2.793803, 0, 0.6039216, 1, 1, 0.1907266, -0.32033, 3.76297, 0, 0.5960785, 1, 1, 0.1919266, -0.8611838, 3.966795, 0, 0.5921569, 1, 1, 0.193822, -0.0591459, 3.295355, 0, 0.5843138, 1, 1, 0.1941535, -0.2592263, 0.2484041, 0, 0.5803922, 1, 1, 0.1954952, -0.5276119, 2.336195, 0, 0.572549, 1, 1, 0.2012863, -0.1710793, 3.221431, 0, 0.5686275, 1, 1, 0.2023221, 1.102883, -0.5265679, 0, 0.5607843, 1, 1, 0.2034055, -1.700599, 2.876624, 0, 0.5568628, 1, 1, 0.2158019, 0.2736247, 1.743772, 0, 0.5490196, 1, 1, 0.2169895, -0.5041618, 5.013321, 0, 0.5450981, 1, 1, 0.2177119, -0.6159305, 3.277567, 0, 0.5372549, 1, 1, 0.218675, -1.230495, 3.968557, 0, 0.5333334, 1, 1, 0.2202629, 0.4221038, 0.624306, 0, 0.5254902, 1, 1, 0.2223106, -2.206882, 3.187871, 0, 0.5215687, 1, 1, 0.2223265, -1.33978, 2.219652, 0, 0.5137255, 1, 1, 0.224406, -1.517141, 3.829382, 0, 0.509804, 1, 1, 0.2250096, 1.762207, -0.7224423, 0, 0.5019608, 1, 1, 0.2250793, -0.4588478, 3.784597, 0, 0.4941176, 1, 1, 0.2294937, 0.7648838, 0.9944369, 0, 0.4901961, 1, 1, 0.2299726, 1.834857, 1.213723, 0, 0.4823529, 1, 1, 0.2304186, -1.059277, 1.350312, 0, 0.4784314, 1, 1, 0.23596, 0.785806, 0.316068, 0, 0.4705882, 1, 1, 0.2363023, -1.371746, 3.375312, 0, 0.4666667, 1, 1, 0.2390265, 0.9710178, 0.1680206, 0, 0.4588235, 1, 1, 0.2433903, 0.2973153, -0.06948679, 0, 0.454902, 1, 1, 0.246723, 1.431574, 2.528978, 0, 0.4470588, 1, 1, 0.2472955, -0.4450093, 3.077058, 0, 0.4431373, 1, 1, 0.2474768, -2.374934, 4.087659, 0, 0.4352941, 1, 1, 0.2539041, 1.200207, 1.135846, 0, 0.4313726, 1, 1, 0.2556354, 1.15777, 1.701482, 0, 0.4235294, 1, 1, 0.2587891, -2.012762, 3.532294, 0, 0.4196078, 1, 1, 0.2590513, -1.024555, 2.717942, 0, 0.4117647, 1, 1, 0.2708801, 1.705766, -0.6916218, 0, 0.4078431, 1, 1, 0.2720287, 0.2604697, 1.274953, 0, 0.4, 1, 1, 0.2735844, -0.1753267, 1.374869, 0, 0.3921569, 1, 1, 0.2783495, 1.028482, 0.5423169, 0, 0.3882353, 1, 1, 0.2889143, -0.1749045, 0.8810517, 0, 0.3803922, 1, 1, 0.2922624, -1.250808, 2.809256, 0, 0.3764706, 1, 1, 0.2925932, 0.8228614, 0.6353365, 0, 0.3686275, 1, 1, 0.2957238, -0.404874, 1.980992, 0, 0.3647059, 1, 1, 0.2980042, -1.482348, 5.516907, 0, 0.3568628, 1, 1, 0.3009081, -2.297354, 0.7265344, 0, 0.3529412, 1, 1, 0.3009254, 0.08145283, 2.607359, 0, 0.345098, 1, 1, 0.3033769, -0.384127, 2.572242, 0, 0.3411765, 1, 1, 0.304983, -0.2186525, 0.679316, 0, 0.3333333, 1, 1, 0.3052855, 0.9741449, -0.2625148, 0, 0.3294118, 1, 1, 0.3127327, -1.025426, 2.882926, 0, 0.3215686, 1, 1, 0.3176703, -0.07882375, 1.927839, 0, 0.3176471, 1, 1, 0.3187481, -1.325893, 2.864139, 0, 0.3098039, 1, 1, 0.3218347, 1.294701, -1.222539, 0, 0.3058824, 1, 1, 0.323179, 0.7736911, -0.02187358, 0, 0.2980392, 1, 1, 0.3253885, 1.40081, 2.243374, 0, 0.2901961, 1, 1, 0.3275485, -0.2586576, 2.640567, 0, 0.2862745, 1, 1, 0.329445, 0.4876393, 0.5938846, 0, 0.2784314, 1, 1, 0.3311284, -1.547809, 3.452212, 0, 0.2745098, 1, 1, 0.3320369, -1.276383, 2.752529, 0, 0.2666667, 1, 1, 0.3328503, 0.005311012, 0.0333871, 0, 0.2627451, 1, 1, 0.3345534, 1.030123, 0.06255801, 0, 0.254902, 1, 1, 0.3346735, 0.2208247, -0.8001022, 0, 0.2509804, 1, 1, 0.3347946, 0.5998743, -0.846743, 0, 0.2431373, 1, 1, 0.34233, 0.00392981, 1.51219, 0, 0.2392157, 1, 1, 0.3452324, -0.7420864, 3.301255, 0, 0.2313726, 1, 1, 0.3515667, -0.9175304, 4.636216, 0, 0.227451, 1, 1, 0.3515858, 1.640112, 1.083451, 0, 0.2196078, 1, 1, 0.3517861, 2.979283, -0.2774582, 0, 0.2156863, 1, 1, 0.3555622, 0.8504694, -1.744174, 0, 0.2078431, 1, 1, 0.3563891, 1.554428, 0.7173033, 0, 0.2039216, 1, 1, 0.356541, 0.4369247, 0.6721689, 0, 0.1960784, 1, 1, 0.3571474, -0.7442459, 4.242527, 0, 0.1882353, 1, 1, 0.3575293, 1.296494, -0.2136661, 0, 0.1843137, 1, 1, 0.3576463, 0.3173674, 0.1182116, 0, 0.1764706, 1, 1, 0.3595352, -0.3965782, 1.381501, 0, 0.172549, 1, 1, 0.3627877, 0.3882457, -0.1051226, 0, 0.1647059, 1, 1, 0.3651111, 0.6073661, 0.970709, 0, 0.1607843, 1, 1, 0.381482, 0.8667743, 0.6279191, 0, 0.1529412, 1, 1, 0.3838699, 0.5900399, -1.147243, 0, 0.1490196, 1, 1, 0.3854428, 1.569984, -1.00212, 0, 0.1411765, 1, 1, 0.3858536, -0.8395494, 3.344123, 0, 0.1372549, 1, 1, 0.3864355, 1.085766, -0.4540426, 0, 0.1294118, 1, 1, 0.3883703, -1.041851, 5.190643, 0, 0.1254902, 1, 1, 0.3931036, 0.3095049, 2.02274, 0, 0.1176471, 1, 1, 0.3958766, 0.1479329, 2.215528, 0, 0.1137255, 1, 1, 0.3972349, -0.9040866, 3.45391, 0, 0.1058824, 1, 1, 0.4004058, 0.7727761, -0.09298023, 0, 0.09803922, 1, 1, 0.4045087, -1.311967, 1.907251, 0, 0.09411765, 1, 1, 0.4064349, 1.747552, 1.644893, 0, 0.08627451, 1, 1, 0.4066172, 0.07660627, 2.018492, 0, 0.08235294, 1, 1, 0.4076965, -0.2039593, -0.01968462, 0, 0.07450981, 1, 1, 0.4113756, 0.1343802, 1.04248, 0, 0.07058824, 1, 1, 0.4114357, -0.4610381, 0.6285846, 0, 0.0627451, 1, 1, 0.4122894, 0.7616508, 0.4553833, 0, 0.05882353, 1, 1, 0.4128219, 0.4840653, 2.00495, 0, 0.05098039, 1, 1, 0.4148462, -1.203968, 3.310016, 0, 0.04705882, 1, 1, 0.4174056, -0.04028793, 2.987437, 0, 0.03921569, 1, 1, 0.4220011, 0.3823957, 1.477475, 0, 0.03529412, 1, 1, 0.427821, 1.334729, 0.8203014, 0, 0.02745098, 1, 1, 0.4280074, 0.787515, 1.510398, 0, 0.02352941, 1, 1, 0.4297377, 0.198971, -0.1662662, 0, 0.01568628, 1, 1, 0.4316362, 0.9586383, 1.378717, 0, 0.01176471, 1, 1, 0.4323781, -0.05905549, 3.958996, 0, 0.003921569, 1, 1, 0.4356667, -0.6507819, 3.038668, 0.003921569, 0, 1, 1, 0.4409439, 0.1480641, 1.116232, 0.007843138, 0, 1, 1, 0.4413747, -1.788845, 3.182379, 0.01568628, 0, 1, 1, 0.4425055, -0.06560653, 2.41249, 0.01960784, 0, 1, 1, 0.4457206, -0.3110181, 4.193334, 0.02745098, 0, 1, 1, 0.4482112, 1.189596, 2.539805, 0.03137255, 0, 1, 1, 0.4501901, 1.102422, -0.579107, 0.03921569, 0, 1, 1, 0.4554328, -1.380439, 2.520571, 0.04313726, 0, 1, 1, 0.4554994, -0.6831191, 2.168366, 0.05098039, 0, 1, 1, 0.4556159, -0.5228176, 1.928028, 0.05490196, 0, 1, 1, 0.4585668, -1.291698, 3.211627, 0.0627451, 0, 1, 1, 0.4637255, 2.066351, -0.004621895, 0.06666667, 0, 1, 1, 0.4642024, -0.3717629, 2.22708, 0.07450981, 0, 1, 1, 0.4726669, -0.4900505, 3.074284, 0.07843138, 0, 1, 1, 0.4727702, -0.4520026, 2.301636, 0.08627451, 0, 1, 1, 0.4770986, -0.6553305, 3.675315, 0.09019608, 0, 1, 1, 0.4792413, 1.392733, -0.6859122, 0.09803922, 0, 1, 1, 0.4797347, -1.279721, 2.438782, 0.1058824, 0, 1, 1, 0.4877299, -1.358623, 1.953613, 0.1098039, 0, 1, 1, 0.4890317, 0.1605615, 1.987459, 0.1176471, 0, 1, 1, 0.4942115, 0.3698183, 1.229392, 0.1215686, 0, 1, 1, 0.4975642, 0.2677683, 2.030649, 0.1294118, 0, 1, 1, 0.5006189, -1.050668, 2.356169, 0.1333333, 0, 1, 1, 0.5010915, -0.7245467, 2.142669, 0.1411765, 0, 1, 1, 0.5061356, -0.1137958, 0.9023812, 0.145098, 0, 1, 1, 0.5184531, -0.6402063, 2.307739, 0.1529412, 0, 1, 1, 0.5194227, 2.129536, -0.6499588, 0.1568628, 0, 1, 1, 0.5264481, -0.6664268, 5.596352, 0.1647059, 0, 1, 1, 0.5286904, -0.06832469, 1.262916, 0.1686275, 0, 1, 1, 0.5393766, 0.7968581, -0.154563, 0.1764706, 0, 1, 1, 0.5507291, 0.5640343, 0.9869999, 0.1803922, 0, 1, 1, 0.5565591, -1.557304, 1.833256, 0.1882353, 0, 1, 1, 0.5574917, -1.063825, 3.144217, 0.1921569, 0, 1, 1, 0.5621306, 0.3849583, 0.6376474, 0.2, 0, 1, 1, 0.571119, -0.6961628, 3.412139, 0.2078431, 0, 1, 1, 0.5730755, 0.6182578, 0.6651175, 0.2117647, 0, 1, 1, 0.5750616, -2.224525, 2.584539, 0.2196078, 0, 1, 1, 0.5782176, 0.6546968, 0.4088605, 0.2235294, 0, 1, 1, 0.579757, 0.3392417, -0.4557294, 0.2313726, 0, 1, 1, 0.5801225, -0.1847407, 2.682243, 0.2352941, 0, 1, 1, 0.5811638, 1.117191, 0.3587458, 0.2431373, 0, 1, 1, 0.5862505, 0.5011646, 1.798699, 0.2470588, 0, 1, 1, 0.5862866, 0.04587646, 2.734573, 0.254902, 0, 1, 1, 0.5885993, -1.09113, 2.813269, 0.2588235, 0, 1, 1, 0.5890039, -0.8178984, 3.087412, 0.2666667, 0, 1, 1, 0.5897626, 0.3990802, 0.5415362, 0.2705882, 0, 1, 1, 0.5926197, -0.3881145, 4.160818, 0.2784314, 0, 1, 1, 0.5940107, 1.085714, 2.40658, 0.282353, 0, 1, 1, 0.5993012, 0.2691254, 0.2309744, 0.2901961, 0, 1, 1, 0.6016318, 0.5772437, 0.3614973, 0.2941177, 0, 1, 1, 0.6019553, 1.341618, 0.2280553, 0.3019608, 0, 1, 1, 0.602414, -1.015755, 2.511844, 0.3098039, 0, 1, 1, 0.6046087, -0.1490694, 0.8177056, 0.3137255, 0, 1, 1, 0.6067082, -0.5848258, 1.648625, 0.3215686, 0, 1, 1, 0.6079947, 0.5492386, 3.521084, 0.3254902, 0, 1, 1, 0.6156392, 1.715453, 2.116924, 0.3333333, 0, 1, 1, 0.6181099, -0.63361, 1.88733, 0.3372549, 0, 1, 1, 0.6205844, -1.069749, 3.429646, 0.345098, 0, 1, 1, 0.6214046, 0.7131546, 0.5887767, 0.3490196, 0, 1, 1, 0.6223137, 0.4277749, -0.3539971, 0.3568628, 0, 1, 1, 0.6233839, -0.2606629, 1.022743, 0.3607843, 0, 1, 1, 0.6248382, -0.176366, -0.4015134, 0.3686275, 0, 1, 1, 0.6264251, 0.2964673, 1.458446, 0.372549, 0, 1, 1, 0.6362135, -0.6324723, 1.612159, 0.3803922, 0, 1, 1, 0.6368054, -0.685777, 4.198045, 0.3843137, 0, 1, 1, 0.6391978, -0.1577649, 3.100101, 0.3921569, 0, 1, 1, 0.6399905, -0.6507239, 2.2789, 0.3960784, 0, 1, 1, 0.6484743, -0.1298317, 2.040753, 0.4039216, 0, 1, 1, 0.6501718, 0.6329297, 0.3199081, 0.4117647, 0, 1, 1, 0.6520759, -0.121308, -0.2088676, 0.4156863, 0, 1, 1, 0.6593961, 0.5839968, 0.7605543, 0.4235294, 0, 1, 1, 0.6601436, 1.470114, 0.9074391, 0.427451, 0, 1, 1, 0.6626678, -0.5177399, 2.982939, 0.4352941, 0, 1, 1, 0.6629011, 0.7062531, 1.961382, 0.4392157, 0, 1, 1, 0.6646577, 1.610101, -1.422009, 0.4470588, 0, 1, 1, 0.6648386, 1.36587, -0.5020999, 0.4509804, 0, 1, 1, 0.6654359, -0.358334, 2.848156, 0.4588235, 0, 1, 1, 0.6728315, 0.8589706, 2.36558, 0.4627451, 0, 1, 1, 0.677031, -0.8066456, 2.193635, 0.4705882, 0, 1, 1, 0.6855178, -0.7481725, 2.199064, 0.4745098, 0, 1, 1, 0.6898991, 0.1519909, 0.6148349, 0.4823529, 0, 1, 1, 0.6982337, 0.9105275, 0.3194984, 0.4862745, 0, 1, 1, 0.6991825, -0.1282343, 0.3833972, 0.4941176, 0, 1, 1, 0.7084576, -0.6077819, 1.964345, 0.5019608, 0, 1, 1, 0.7088754, -0.01251363, 2.431157, 0.5058824, 0, 1, 1, 0.7098451, -0.397633, 2.057463, 0.5137255, 0, 1, 1, 0.711823, -0.1985883, 2.539273, 0.5176471, 0, 1, 1, 0.7134149, 0.5856132, 1.206811, 0.5254902, 0, 1, 1, 0.7140071, -1.174992, 0.3784821, 0.5294118, 0, 1, 1, 0.7142087, -1.025126, 3.03617, 0.5372549, 0, 1, 1, 0.7165619, -0.1494736, 1.083271, 0.5411765, 0, 1, 1, 0.7190713, 0.8631954, 0.6580632, 0.5490196, 0, 1, 1, 0.7224059, 0.7754694, -1.215356, 0.5529412, 0, 1, 1, 0.7254566, -1.464727, 2.682121, 0.5607843, 0, 1, 1, 0.7333775, -0.939008, 1.169323, 0.5647059, 0, 1, 1, 0.735426, -1.421313, -0.1477972, 0.572549, 0, 1, 1, 0.7363474, -0.2684667, 1.042117, 0.5764706, 0, 1, 1, 0.7364636, -0.7006432, 2.065723, 0.5843138, 0, 1, 1, 0.7386662, 0.8120462, 0.44569, 0.5882353, 0, 1, 1, 0.7412976, 1.620351, 1.267774, 0.5960785, 0, 1, 1, 0.7417052, -0.06442431, 1.708996, 0.6039216, 0, 1, 1, 0.7424252, 0.06484162, 3.38499, 0.6078432, 0, 1, 1, 0.7427641, 0.6473124, 2.831218, 0.6156863, 0, 1, 1, 0.7496001, 0.1667722, 2.788516, 0.6196079, 0, 1, 1, 0.7531925, 0.2617265, 1.689847, 0.627451, 0, 1, 1, 0.7565337, 1.075747, -0.2775296, 0.6313726, 0, 1, 1, 0.7575761, 1.678655, 0.01695569, 0.6392157, 0, 1, 1, 0.757981, -0.8148386, 2.750436, 0.6431373, 0, 1, 1, 0.7645569, -0.1032875, 1.545105, 0.6509804, 0, 1, 1, 0.7646669, 1.347859, 1.800769, 0.654902, 0, 1, 1, 0.7697389, -0.9157403, 2.18872, 0.6627451, 0, 1, 1, 0.7797895, -0.7635844, 2.488471, 0.6666667, 0, 1, 1, 0.7860193, 0.6516501, -1.359479, 0.6745098, 0, 1, 1, 0.7876377, -0.2626083, 2.685816, 0.6784314, 0, 1, 1, 0.7892315, -2.022488, 2.330196, 0.6862745, 0, 1, 1, 0.7934678, 0.2381214, 0.1377987, 0.6901961, 0, 1, 1, 0.7958398, -0.3020465, 0.8647391, 0.6980392, 0, 1, 1, 0.7983878, -1.027663, 2.487582, 0.7058824, 0, 1, 1, 0.7991637, -0.09340861, 2.507359, 0.7098039, 0, 1, 1, 0.8003608, -0.8744119, 0.7357688, 0.7176471, 0, 1, 1, 0.8097668, -0.3826755, 3.183741, 0.7215686, 0, 1, 1, 0.8101232, -0.9759485, 3.745287, 0.7294118, 0, 1, 1, 0.814422, -1.231541, 3.328119, 0.7333333, 0, 1, 1, 0.8159904, 1.418628, 1.648757, 0.7411765, 0, 1, 1, 0.8163225, 1.528723, 0.7070161, 0.7450981, 0, 1, 1, 0.8282247, -0.760502, 2.500838, 0.7529412, 0, 1, 1, 0.84055, -0.255225, 0.4348913, 0.7568628, 0, 1, 1, 0.8471673, 0.005031932, 3.470464, 0.7647059, 0, 1, 1, 0.8485202, 1.854793, -0.01015981, 0.7686275, 0, 1, 1, 0.8496999, 1.007073, -0.1626783, 0.7764706, 0, 1, 1, 0.8556046, 0.8079992, 2.720686, 0.7803922, 0, 1, 1, 0.8626436, 0.3880748, 1.429694, 0.7882353, 0, 1, 1, 0.8648326, -0.509873, 1.136418, 0.7921569, 0, 1, 1, 0.8649521, -0.802292, 2.544398, 0.8, 0, 1, 1, 0.8703353, 2.179704, 0.6605577, 0.8078431, 0, 1, 1, 0.8751601, -0.3775094, 1.807552, 0.8117647, 0, 1, 1, 0.8771368, 0.3266158, 2.382301, 0.8196079, 0, 1, 1, 0.8776261, 0.1824818, 2.029331, 0.8235294, 0, 1, 1, 0.8789911, -0.7919573, 4.169865, 0.8313726, 0, 1, 1, 0.8816187, 0.3027847, 1.204155, 0.8352941, 0, 1, 1, 0.8837321, -1.376753, 3.141988, 0.8431373, 0, 1, 1, 0.8904416, 0.1752, 0.7157746, 0.8470588, 0, 1, 1, 0.8912826, -1.258734, 1.843633, 0.854902, 0, 1, 1, 0.8924621, -1.788919, 2.051347, 0.8588235, 0, 1, 1, 0.8948843, 0.07513086, 0.4591779, 0.8666667, 0, 1, 1, 0.9000522, -0.11395, -0.2955461, 0.8705882, 0, 1, 1, 0.904426, -0.7497355, 0.3816854, 0.8784314, 0, 1, 1, 0.9114405, -0.537724, 1.826482, 0.8823529, 0, 1, 1, 0.9119896, 3.111706, 0.9923554, 0.8901961, 0, 1, 1, 0.9170523, -0.296596, 3.103548, 0.8941177, 0, 1, 1, 0.9172096, 0.9989926, -0.6502731, 0.9019608, 0, 1, 1, 0.9208454, -1.317182, 3.460612, 0.9098039, 0, 1, 1, 0.9241608, -0.05279292, 3.684329, 0.9137255, 0, 1, 1, 0.9288864, -0.5250975, 0.5513981, 0.9215686, 0, 1, 1, 0.9391463, 1.410991, -0.417493, 0.9254902, 0, 1, 1, 0.9425129, -0.4207627, 4.162292, 0.9333333, 0, 1, 1, 0.9452402, 0.7923401, -0.5186404, 0.9372549, 0, 1, 1, 0.9477111, -0.8155935, 2.834039, 0.945098, 0, 1, 1, 0.9488044, -0.537768, 1.976828, 0.9490196, 0, 1, 1, 0.9495524, 1.215656, -0.3250437, 0.9568627, 0, 1, 1, 0.9496131, 0.7329666, 2.783293, 0.9607843, 0, 1, 1, 0.9531842, 0.7921531, 1.743576, 0.9686275, 0, 1, 1, 0.9565371, 0.4107123, 0.07543498, 0.972549, 0, 1, 1, 0.9614781, 0.1086503, 3.053196, 0.9803922, 0, 1, 1, 0.969575, -0.1983749, 0.7774493, 0.9843137, 0, 1, 1, 0.9709104, -1.375586, 1.936371, 0.9921569, 0, 1, 1, 0.9825982, 0.5091119, 0.6256247, 0.9960784, 0, 1, 1, 0.9851177, 1.724101, 0.8073437, 1, 0, 0.9960784, 1, 0.9861733, 0.2678856, 1.783419, 1, 0, 0.9882353, 1, 0.9920127, -2.277959, 2.260442, 1, 0, 0.9843137, 1, 0.9944171, -1.734813, 3.685831, 1, 0, 0.9764706, 1, 0.9986115, -0.8684049, 1.771273, 1, 0, 0.972549, 1, 1.003942, 1.320031, 0.6014292, 1, 0, 0.9647059, 1, 1.004462, 0.1479974, 1.637888, 1, 0, 0.9607843, 1, 1.008292, 0.3981189, 1.369788, 1, 0, 0.9529412, 1, 1.010434, -1.244562, 2.770515, 1, 0, 0.9490196, 1, 1.012842, 1.280877, 2.361857, 1, 0, 0.9411765, 1, 1.0157, -0.7134362, 2.611521, 1, 0, 0.9372549, 1, 1.021212, 0.004950232, 2.175097, 1, 0, 0.9294118, 1, 1.02393, 1.320682, 0.2442891, 1, 0, 0.9254902, 1, 1.025423, 0.2709677, 0.9567212, 1, 0, 0.9176471, 1, 1.030094, -0.3050508, 2.717938, 1, 0, 0.9137255, 1, 1.034156, -0.08372598, 2.035618, 1, 0, 0.9058824, 1, 1.039411, 1.159853, 1.607487, 1, 0, 0.9019608, 1, 1.041379, 0.238862, 1.554415, 1, 0, 0.8941177, 1, 1.042011, 0.8950515, 0.3822294, 1, 0, 0.8862745, 1, 1.043655, -1.148504, 1.552666, 1, 0, 0.8823529, 1, 1.049426, -2.033597, 2.851365, 1, 0, 0.8745098, 1, 1.05016, 1.344979, 2.49492, 1, 0, 0.8705882, 1, 1.074829, 0.7758042, 0.4319749, 1, 0, 0.8627451, 1, 1.07576, -1.378636, 1.869136, 1, 0, 0.8588235, 1, 1.0842, -1.343821, 1.254764, 1, 0, 0.8509804, 1, 1.086258, -0.04525762, 1.772833, 1, 0, 0.8470588, 1, 1.090559, 1.631509, -0.9632675, 1, 0, 0.8392157, 1, 1.107696, -0.7462182, 0.1851986, 1, 0, 0.8352941, 1, 1.115089, 0.238266, 0.7295182, 1, 0, 0.827451, 1, 1.121682, 0.09040037, 2.670251, 1, 0, 0.8235294, 1, 1.128038, 0.274038, 0.3015952, 1, 0, 0.8156863, 1, 1.138762, -0.6518133, 3.96434, 1, 0, 0.8117647, 1, 1.140281, -0.8161467, 3.713209, 1, 0, 0.8039216, 1, 1.14402, -0.7202312, 2.442792, 1, 0, 0.7960784, 1, 1.145479, 1.339063, -0.7972751, 1, 0, 0.7921569, 1, 1.150406, -2.241918, 4.291909, 1, 0, 0.7843137, 1, 1.153135, -1.068168, 1.292936, 1, 0, 0.7803922, 1, 1.154143, -1.056253, 2.602782, 1, 0, 0.772549, 1, 1.156095, -1.258375, 2.651707, 1, 0, 0.7686275, 1, 1.156451, 0.02285489, 3.340601, 1, 0, 0.7607843, 1, 1.159517, 0.3768272, 1.785618, 1, 0, 0.7568628, 1, 1.16177, 1.007673, 1.334835, 1, 0, 0.7490196, 1, 1.167476, 0.2249296, 2.818726, 1, 0, 0.7450981, 1, 1.18249, 1.540369, -0.5997701, 1, 0, 0.7372549, 1, 1.183124, 0.1665829, 0.04667661, 1, 0, 0.7333333, 1, 1.196692, 1.879082, 1.692012, 1, 0, 0.7254902, 1, 1.203768, 0.6946877, 0.03095528, 1, 0, 0.7215686, 1, 1.206036, -1.346244, 3.162327, 1, 0, 0.7137255, 1, 1.211793, 0.09801733, 1.298434, 1, 0, 0.7098039, 1, 1.213776, 0.6816937, 1.599954, 1, 0, 0.7019608, 1, 1.218591, -0.8236156, 1.759628, 1, 0, 0.6941177, 1, 1.221664, -2.260857, 0.7278852, 1, 0, 0.6901961, 1, 1.223676, -2.069903, 2.37786, 1, 0, 0.682353, 1, 1.223726, -1.125181, 3.110306, 1, 0, 0.6784314, 1, 1.22526, 0.30419, 1.206739, 1, 0, 0.6705883, 1, 1.232394, 0.2568232, 2.06575, 1, 0, 0.6666667, 1, 1.238546, -1.193533, -0.46142, 1, 0, 0.6588235, 1, 1.244653, -1.284162, 2.969184, 1, 0, 0.654902, 1, 1.247783, 0.07209167, 1.991375, 1, 0, 0.6470588, 1, 1.250813, -2.081697, 4.52764, 1, 0, 0.6431373, 1, 1.264144, -0.9318942, 1.413892, 1, 0, 0.6352941, 1, 1.273708, -0.8873606, 1.670667, 1, 0, 0.6313726, 1, 1.274378, 0.3752847, 1.723219, 1, 0, 0.6235294, 1, 1.274813, 0.2047893, -0.7351786, 1, 0, 0.6196079, 1, 1.275242, 1.160195, 1.127626, 1, 0, 0.6117647, 1, 1.278939, 1.366154, 1.235716, 1, 0, 0.6078432, 1, 1.279161, -1.419408, 2.912894, 1, 0, 0.6, 1, 1.283321, 2.007731, 0.2889565, 1, 0, 0.5921569, 1, 1.284855, -0.9014806, 2.891276, 1, 0, 0.5882353, 1, 1.289999, 1.455491, 0.6589308, 1, 0, 0.5803922, 1, 1.29, -0.2570791, 1.220116, 1, 0, 0.5764706, 1, 1.295355, -1.113645, 1.399655, 1, 0, 0.5686275, 1, 1.298994, -0.3598979, -0.2847272, 1, 0, 0.5647059, 1, 1.301311, 0.259072, 2.446207, 1, 0, 0.5568628, 1, 1.30312, 0.9808727, 1.658909, 1, 0, 0.5529412, 1, 1.303171, 0.4828959, 1.066357, 1, 0, 0.5450981, 1, 1.310836, 1.683329, 1.581346, 1, 0, 0.5411765, 1, 1.31108, -0.1326544, 2.10022, 1, 0, 0.5333334, 1, 1.320402, 0.733004, 0.1080048, 1, 0, 0.5294118, 1, 1.323178, 0.5275669, 1.170804, 1, 0, 0.5215687, 1, 1.324878, -0.1803564, 0.7436465, 1, 0, 0.5176471, 1, 1.333908, 0.6599739, 2.942089, 1, 0, 0.509804, 1, 1.350202, -0.2033982, -0.0237869, 1, 0, 0.5058824, 1, 1.36499, -1.699921, 2.393694, 1, 0, 0.4980392, 1, 1.371383, -1.310201, 2.726379, 1, 0, 0.4901961, 1, 1.371869, -1.20406, 1.439968, 1, 0, 0.4862745, 1, 1.376299, -0.2354478, 1.060836, 1, 0, 0.4784314, 1, 1.378306, 0.1821795, 0.3755883, 1, 0, 0.4745098, 1, 1.382357, 0.1232543, 1.243495, 1, 0, 0.4666667, 1, 1.383046, 0.0484792, 0.1329452, 1, 0, 0.4627451, 1, 1.388989, 1.016537, 1.290661, 1, 0, 0.454902, 1, 1.391333, 0.3463922, -0.5584871, 1, 0, 0.4509804, 1, 1.395942, 0.4901505, 1.587486, 1, 0, 0.4431373, 1, 1.396161, -0.1464379, 0.1594832, 1, 0, 0.4392157, 1, 1.415647, -0.2936496, 1.712578, 1, 0, 0.4313726, 1, 1.42597, 2.062106, -0.3985394, 1, 0, 0.427451, 1, 1.439309, 0.3376613, 0.4129198, 1, 0, 0.4196078, 1, 1.483252, 0.5293368, 1.361901, 1, 0, 0.4156863, 1, 1.511177, -0.2075969, -0.5788451, 1, 0, 0.4078431, 1, 1.520701, -0.5123276, 4.341491, 1, 0, 0.4039216, 1, 1.528113, -1.40169, 3.261873, 1, 0, 0.3960784, 1, 1.543583, 0.7053776, 0.799771, 1, 0, 0.3882353, 1, 1.558302, -0.9258178, 1.765789, 1, 0, 0.3843137, 1, 1.560893, -0.4324594, 1.752947, 1, 0, 0.3764706, 1, 1.563044, -0.654671, 2.93827, 1, 0, 0.372549, 1, 1.567935, 1.055689, 1.748151, 1, 0, 0.3647059, 1, 1.57761, -0.4912733, 0.931029, 1, 0, 0.3607843, 1, 1.578859, -0.1420315, 1.189026, 1, 0, 0.3529412, 1, 1.587076, 0.5836068, 0.9374604, 1, 0, 0.3490196, 1, 1.603437, -0.4698967, 3.016259, 1, 0, 0.3411765, 1, 1.644859, -2.123158, 3.511125, 1, 0, 0.3372549, 1, 1.646842, 0.7759938, 0.7168282, 1, 0, 0.3294118, 1, 1.655221, 0.2530193, 2.395925, 1, 0, 0.3254902, 1, 1.658052, -0.8621539, 4.201818, 1, 0, 0.3176471, 1, 1.664031, -0.04646412, 1.524129, 1, 0, 0.3137255, 1, 1.670974, -0.8842275, 3.797628, 1, 0, 0.3058824, 1, 1.67499, -0.7295113, 1.62067, 1, 0, 0.2980392, 1, 1.67781, 1.172041, 1.425097, 1, 0, 0.2941177, 1, 1.691136, 1.198829, 1.793632, 1, 0, 0.2862745, 1, 1.696607, -1.432879, 4.748689, 1, 0, 0.282353, 1, 1.70827, 0.6867153, -0.7699923, 1, 0, 0.2745098, 1, 1.724047, -0.4631184, 2.116606, 1, 0, 0.2705882, 1, 1.725773, -0.8481862, 2.182085, 1, 0, 0.2627451, 1, 1.726691, -0.2399298, 4.476498, 1, 0, 0.2588235, 1, 1.739514, 0.7574553, 1.219209, 1, 0, 0.2509804, 1, 1.739863, 1.361652, -0.4841153, 1, 0, 0.2470588, 1, 1.749478, -1.520443, 3.291497, 1, 0, 0.2392157, 1, 1.758009, -0.02998418, 1.836874, 1, 0, 0.2352941, 1, 1.767492, -0.0585458, -0.5947905, 1, 0, 0.227451, 1, 1.767566, -0.628755, 3.174954, 1, 0, 0.2235294, 1, 1.776776, -1.111207, 2.548423, 1, 0, 0.2156863, 1, 1.791137, 1.754794, 0.4846855, 1, 0, 0.2117647, 1, 1.792421, 0.09873727, 1.421054, 1, 0, 0.2039216, 1, 1.794126, 1.076757, 0.4224645, 1, 0, 0.1960784, 1, 1.830469, 0.396431, 2.138397, 1, 0, 0.1921569, 1, 1.852288, -0.1684952, 2.986723, 1, 0, 0.1843137, 1, 1.855095, 0.3274216, 0.5856889, 1, 0, 0.1803922, 1, 1.869216, 0.2535161, -0.02854602, 1, 0, 0.172549, 1, 1.869502, -0.2578579, 2.322539, 1, 0, 0.1686275, 1, 1.875387, -0.3261358, 0.6053901, 1, 0, 0.1607843, 1, 1.881627, -0.6010503, 2.425729, 1, 0, 0.1568628, 1, 1.89154, 0.8369356, 1.69458, 1, 0, 0.1490196, 1, 1.899545, -1.707219, 1.390472, 1, 0, 0.145098, 1, 1.905826, 2.476572, 0.081252, 1, 0, 0.1372549, 1, 1.940293, -0.3187639, 0.8999171, 1, 0, 0.1333333, 1, 1.940864, -1.391854, 3.455104, 1, 0, 0.1254902, 1, 1.947695, 0.339602, 3.759177, 1, 0, 0.1215686, 1, 1.955725, -1.176842, 2.35386, 1, 0, 0.1137255, 1, 1.982898, 1.047807, 0.7844298, 1, 0, 0.1098039, 1, 1.987527, -0.7509121, 3.545171, 1, 0, 0.1019608, 1, 2.033583, -1.671298, 2.425543, 1, 0, 0.09411765, 1, 2.038008, -0.8607879, 3.384688, 1, 0, 0.09019608, 1, 2.173916, 0.5844948, 1.174356, 1, 0, 0.08235294, 1, 2.207066, 0.251929, -0.2833448, 1, 0, 0.07843138, 1, 2.237061, -0.8840861, 2.832126, 1, 0, 0.07058824, 1, 2.26224, 0.5699599, 0.4517338, 1, 0, 0.06666667, 1, 2.266573, -1.132835, 2.681299, 1, 0, 0.05882353, 1, 2.342492, -0.05236486, 1.440976, 1, 0, 0.05490196, 1, 2.344747, 1.134032, 0.5391996, 1, 0, 0.04705882, 1, 2.375073, -0.6507841, 2.311028, 1, 0, 0.04313726, 1, 2.390301, 1.690016, 2.165089, 1, 0, 0.03529412, 1, 2.427741, 1.8221, 0.6546539, 1, 0, 0.03137255, 1, 2.620258, -0.4330123, 3.546283, 1, 0, 0.02352941, 1, 2.649158, -0.1035898, 1.911503, 1, 0, 0.01960784, 1, 2.929907, -0.8692203, 0.8631613, 1, 0, 0.01176471, 1, 3.40647, -0.8143915, 2.609863, 1, 0, 0.007843138, 1 ]); var buf6 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf6); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var mvMatLoc6 = gl.getUniformLocation(prog6,"mvMatrix"); var prMatLoc6 = gl.getUniformLocation(prog6,"prMatrix"); // ****** text object 8 ****** var prog8 = gl.createProgram(); gl.attachShader(prog8, getShader( gl, "testglvshader8" )); gl.attachShader(prog8, getShader( gl, "testglfshader8" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog8, 0, "aPos"); gl.bindAttribLocation(prog8, 1, "aCol"); gl.linkProgram(prog8); var texts = [ "x" ]; var texinfo = drawTextToCanvas(texts, 1); var canvasX8 = texinfo.canvasX; var canvasY8 = texinfo.canvasY; var ofsLoc8 = gl.getAttribLocation(prog8, "aOfs"); var texture8 = gl.createTexture(); var texLoc8 = gl.getAttribLocation(prog8, "aTexcoord"); var sampler8 = gl.getUniformLocation(prog8,"uSampler"); handleLoadedTexture(texture8, document.getElementById("testgltextureCanvas")); var v=new Float32Array([ 0.227199, -4.44276, -8.006407, 0, -0.5, 0.5, 0.5, 0.227199, -4.44276, -8.006407, 1, -0.5, 0.5, 0.5, 0.227199, -4.44276, -8.006407, 1, 1.5, 0.5, 0.5, 0.227199, -4.44276, -8.006407, 0, 1.5, 0.5, 0.5 ]); for (var i=0; i<1; i++) for (var j=0; j<4; j++) { ind = 7*(4*i + j) + 3; v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width; v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height; v[ind] *= texinfo.widths[i]/texinfo.canvasX; v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip - v[ind+1]*texinfo.textHeight)/texinfo.canvasY; } var f=new Uint16Array([ 0, 1, 2, 0, 2, 3 ]); var buf8 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf8); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var ibuf8 = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf8); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW); var mvMatLoc8 = gl.getUniformLocation(prog8,"mvMatrix"); var prMatLoc8 = gl.getUniformLocation(prog8,"prMatrix"); // ****** text object 9 ****** var prog9 = gl.createProgram(); gl.attachShader(prog9, getShader( gl, "testglvshader9" )); gl.attachShader(prog9, getShader( gl, "testglfshader9" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog9, 0, "aPos"); gl.bindAttribLocation(prog9, 1, "aCol"); gl.linkProgram(prog9); var texts = [ "y" ]; var texinfo = drawTextToCanvas(texts, 1); var canvasX9 = texinfo.canvasX; var canvasY9 = texinfo.canvasY; var ofsLoc9 = gl.getAttribLocation(prog9, "aOfs"); var texture9 = gl.createTexture(); var texLoc9 = gl.getAttribLocation(prog9, "aTexcoord"); var sampler9 = gl.getUniformLocation(prog9,"uSampler"); handleLoadedTexture(texture9, document.getElementById("testgltextureCanvas")); var v=new Float32Array([ -4.029845, -0.1180786, -8.006407, 0, -0.5, 0.5, 0.5, -4.029845, -0.1180786, -8.006407, 1, -0.5, 0.5, 0.5, -4.029845, -0.1180786, -8.006407, 1, 1.5, 0.5, 0.5, -4.029845, -0.1180786, -8.006407, 0, 1.5, 0.5, 0.5 ]); for (var i=0; i<1; i++) for (var j=0; j<4; j++) { ind = 7*(4*i + j) + 3; v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width; v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height; v[ind] *= texinfo.widths[i]/texinfo.canvasX; v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip - v[ind+1]*texinfo.textHeight)/texinfo.canvasY; } var f=new Uint16Array([ 0, 1, 2, 0, 2, 3 ]); var buf9 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf9); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var ibuf9 = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf9); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW); var mvMatLoc9 = gl.getUniformLocation(prog9,"mvMatrix"); var prMatLoc9 = gl.getUniformLocation(prog9,"prMatrix"); // ****** text object 10 ****** var prog10 = gl.createProgram(); gl.attachShader(prog10, getShader( gl, "testglvshader10" )); gl.attachShader(prog10, getShader( gl, "testglfshader10" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog10, 0, "aPos"); gl.bindAttribLocation(prog10, 1, "aCol"); gl.linkProgram(prog10); var texts = [ "z" ]; var texinfo = drawTextToCanvas(texts, 1); var canvasX10 = texinfo.canvasX; var canvasY10 = texinfo.canvasY; var ofsLoc10 = gl.getAttribLocation(prog10, "aOfs"); var texture10 = gl.createTexture(); var texLoc10 = gl.getAttribLocation(prog10, "aTexcoord"); var sampler10 = gl.getUniformLocation(prog10,"uSampler"); handleLoadedTexture(texture10, document.getElementById("testgltextureCanvas")); var v=new Float32Array([ -4.029845, -4.44276, -0.2192783, 0, -0.5, 0.5, 0.5, -4.029845, -4.44276, -0.2192783, 1, -0.5, 0.5, 0.5, -4.029845, -4.44276, -0.2192783, 1, 1.5, 0.5, 0.5, -4.029845, -4.44276, -0.2192783, 0, 1.5, 0.5, 0.5 ]); for (var i=0; i<1; i++) for (var j=0; j<4; j++) { ind = 7*(4*i + j) + 3; v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width; v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height; v[ind] *= texinfo.widths[i]/texinfo.canvasX; v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip - v[ind+1]*texinfo.textHeight)/texinfo.canvasY; } var f=new Uint16Array([ 0, 1, 2, 0, 2, 3 ]); var buf10 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf10); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var ibuf10 = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf10); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW); var mvMatLoc10 = gl.getUniformLocation(prog10,"mvMatrix"); var prMatLoc10 = gl.getUniformLocation(prog10,"prMatrix"); // ****** lines object 11 ****** var prog11 = gl.createProgram(); gl.attachShader(prog11, getShader( gl, "testglvshader11" )); gl.attachShader(prog11, getShader( gl, "testglfshader11" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog11, 0, "aPos"); gl.bindAttribLocation(prog11, 1, "aCol"); gl.linkProgram(prog11); var v=new Float32Array([ -2, -3.444757, -6.209377, 3, -3.444757, -6.209377, -2, -3.444757, -6.209377, -2, -3.61109, -6.508882, -1, -3.444757, -6.209377, -1, -3.61109, -6.508882, 0, -3.444757, -6.209377, 0, -3.61109, -6.508882, 1, -3.444757, -6.209377, 1, -3.61109, -6.508882, 2, -3.444757, -6.209377, 2, -3.61109, -6.508882, 3, -3.444757, -6.209377, 3, -3.61109, -6.508882 ]); var buf11 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf11); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var mvMatLoc11 = gl.getUniformLocation(prog11,"mvMatrix"); var prMatLoc11 = gl.getUniformLocation(prog11,"prMatrix"); // ****** text object 12 ****** var prog12 = gl.createProgram(); gl.attachShader(prog12, getShader( gl, "testglvshader12" )); gl.attachShader(prog12, getShader( gl, "testglfshader12" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog12, 0, "aPos"); gl.bindAttribLocation(prog12, 1, "aCol"); gl.linkProgram(prog12); var texts = [ "-2", "-1", "0", "1", "2", "3" ]; var texinfo = drawTextToCanvas(texts, 1); var canvasX12 = texinfo.canvasX; var canvasY12 = texinfo.canvasY; var ofsLoc12 = gl.getAttribLocation(prog12, "aOfs"); var texture12 = gl.createTexture(); var texLoc12 = gl.getAttribLocation(prog12, "aTexcoord"); var sampler12 = gl.getUniformLocation(prog12,"uSampler"); handleLoadedTexture(texture12, document.getElementById("testgltextureCanvas")); var v=new Float32Array([ -2, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5, -2, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5, -2, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5, -2, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5, -1, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5, -1, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5, -1, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5, -1, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5, 0, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5, 0, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5, 0, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5, 0, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5, 1, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5, 1, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5, 1, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5, 1, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5, 2, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5, 2, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5, 2, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5, 2, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5, 3, -3.943758, -7.107892, 0, -0.5, 0.5, 0.5, 3, -3.943758, -7.107892, 1, -0.5, 0.5, 0.5, 3, -3.943758, -7.107892, 1, 1.5, 0.5, 0.5, 3, -3.943758, -7.107892, 0, 1.5, 0.5, 0.5 ]); for (var i=0; i<6; i++) for (var j=0; j<4; j++) { ind = 7*(4*i + j) + 3; v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width; v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height; v[ind] *= texinfo.widths[i]/texinfo.canvasX; v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip - v[ind+1]*texinfo.textHeight)/texinfo.canvasY; } var f=new Uint16Array([ 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23 ]); var buf12 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf12); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var ibuf12 = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf12); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW); var mvMatLoc12 = gl.getUniformLocation(prog12,"mvMatrix"); var prMatLoc12 = gl.getUniformLocation(prog12,"prMatrix"); // ****** lines object 13 ****** var prog13 = gl.createProgram(); gl.attachShader(prog13, getShader( gl, "testglvshader13" )); gl.attachShader(prog13, getShader( gl, "testglfshader13" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog13, 0, "aPos"); gl.bindAttribLocation(prog13, 1, "aCol"); gl.linkProgram(prog13); var v=new Float32Array([ -3.04745, -3, -6.209377, -3.04745, 3, -6.209377, -3.04745, -3, -6.209377, -3.211183, -3, -6.508882, -3.04745, -2, -6.209377, -3.211183, -2, -6.508882, -3.04745, -1, -6.209377, -3.211183, -1, -6.508882, -3.04745, 0, -6.209377, -3.211183, 0, -6.508882, -3.04745, 1, -6.209377, -3.211183, 1, -6.508882, -3.04745, 2, -6.209377, -3.211183, 2, -6.508882, -3.04745, 3, -6.209377, -3.211183, 3, -6.508882 ]); var buf13 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf13); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var mvMatLoc13 = gl.getUniformLocation(prog13,"mvMatrix"); var prMatLoc13 = gl.getUniformLocation(prog13,"prMatrix"); // ****** text object 14 ****** var prog14 = gl.createProgram(); gl.attachShader(prog14, getShader( gl, "testglvshader14" )); gl.attachShader(prog14, getShader( gl, "testglfshader14" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog14, 0, "aPos"); gl.bindAttribLocation(prog14, 1, "aCol"); gl.linkProgram(prog14); var texts = [ "-3", "-2", "-1", "0", "1", "2", "3" ]; var texinfo = drawTextToCanvas(texts, 1); var canvasX14 = texinfo.canvasX; var canvasY14 = texinfo.canvasY; var ofsLoc14 = gl.getAttribLocation(prog14, "aOfs"); var texture14 = gl.createTexture(); var texLoc14 = gl.getAttribLocation(prog14, "aTexcoord"); var sampler14 = gl.getUniformLocation(prog14,"uSampler"); handleLoadedTexture(texture14, document.getElementById("testgltextureCanvas")); var v=new Float32Array([ -3.538648, -3, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, -3, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, -3, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, -3, -7.107892, 0, 1.5, 0.5, 0.5, -3.538648, -2, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, -2, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, -2, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, -2, -7.107892, 0, 1.5, 0.5, 0.5, -3.538648, -1, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, -1, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, -1, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, -1, -7.107892, 0, 1.5, 0.5, 0.5, -3.538648, 0, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, 0, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, 0, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, 0, -7.107892, 0, 1.5, 0.5, 0.5, -3.538648, 1, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, 1, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, 1, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, 1, -7.107892, 0, 1.5, 0.5, 0.5, -3.538648, 2, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, 2, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, 2, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, 2, -7.107892, 0, 1.5, 0.5, 0.5, -3.538648, 3, -7.107892, 0, -0.5, 0.5, 0.5, -3.538648, 3, -7.107892, 1, -0.5, 0.5, 0.5, -3.538648, 3, -7.107892, 1, 1.5, 0.5, 0.5, -3.538648, 3, -7.107892, 0, 1.5, 0.5, 0.5 ]); for (var i=0; i<7; i++) for (var j=0; j<4; j++) { ind = 7*(4*i + j) + 3; v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width; v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height; v[ind] *= texinfo.widths[i]/texinfo.canvasX; v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip - v[ind+1]*texinfo.textHeight)/texinfo.canvasY; } var f=new Uint16Array([ 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23, 24, 25, 26, 24, 26, 27 ]); var buf14 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf14); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var ibuf14 = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf14); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW); var mvMatLoc14 = gl.getUniformLocation(prog14,"mvMatrix"); var prMatLoc14 = gl.getUniformLocation(prog14,"prMatrix"); // ****** lines object 15 ****** var prog15 = gl.createProgram(); gl.attachShader(prog15, getShader( gl, "testglvshader15" )); gl.attachShader(prog15, getShader( gl, "testglfshader15" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog15, 0, "aPos"); gl.bindAttribLocation(prog15, 1, "aCol"); gl.linkProgram(prog15); var v=new Float32Array([ -3.04745, -3.444757, -6, -3.04745, -3.444757, 4, -3.04745, -3.444757, -6, -3.211183, -3.61109, -6, -3.04745, -3.444757, -4, -3.211183, -3.61109, -4, -3.04745, -3.444757, -2, -3.211183, -3.61109, -2, -3.04745, -3.444757, 0, -3.211183, -3.61109, 0, -3.04745, -3.444757, 2, -3.211183, -3.61109, 2, -3.04745, -3.444757, 4, -3.211183, -3.61109, 4 ]); var buf15 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf15); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var mvMatLoc15 = gl.getUniformLocation(prog15,"mvMatrix"); var prMatLoc15 = gl.getUniformLocation(prog15,"prMatrix"); // ****** text object 16 ****** var prog16 = gl.createProgram(); gl.attachShader(prog16, getShader( gl, "testglvshader16" )); gl.attachShader(prog16, getShader( gl, "testglfshader16" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog16, 0, "aPos"); gl.bindAttribLocation(prog16, 1, "aCol"); gl.linkProgram(prog16); var texts = [ "-6", "-4", "-2", "0", "2", "4" ]; var texinfo = drawTextToCanvas(texts, 1); var canvasX16 = texinfo.canvasX; var canvasY16 = texinfo.canvasY; var ofsLoc16 = gl.getAttribLocation(prog16, "aOfs"); var texture16 = gl.createTexture(); var texLoc16 = gl.getAttribLocation(prog16, "aTexcoord"); var sampler16 = gl.getUniformLocation(prog16,"uSampler"); handleLoadedTexture(texture16, document.getElementById("testgltextureCanvas")); var v=new Float32Array([ -3.538648, -3.943758, -6, 0, -0.5, 0.5, 0.5, -3.538648, -3.943758, -6, 1, -0.5, 0.5, 0.5, -3.538648, -3.943758, -6, 1, 1.5, 0.5, 0.5, -3.538648, -3.943758, -6, 0, 1.5, 0.5, 0.5, -3.538648, -3.943758, -4, 0, -0.5, 0.5, 0.5, -3.538648, -3.943758, -4, 1, -0.5, 0.5, 0.5, -3.538648, -3.943758, -4, 1, 1.5, 0.5, 0.5, -3.538648, -3.943758, -4, 0, 1.5, 0.5, 0.5, -3.538648, -3.943758, -2, 0, -0.5, 0.5, 0.5, -3.538648, -3.943758, -2, 1, -0.5, 0.5, 0.5, -3.538648, -3.943758, -2, 1, 1.5, 0.5, 0.5, -3.538648, -3.943758, -2, 0, 1.5, 0.5, 0.5, -3.538648, -3.943758, 0, 0, -0.5, 0.5, 0.5, -3.538648, -3.943758, 0, 1, -0.5, 0.5, 0.5, -3.538648, -3.943758, 0, 1, 1.5, 0.5, 0.5, -3.538648, -3.943758, 0, 0, 1.5, 0.5, 0.5, -3.538648, -3.943758, 2, 0, -0.5, 0.5, 0.5, -3.538648, -3.943758, 2, 1, -0.5, 0.5, 0.5, -3.538648, -3.943758, 2, 1, 1.5, 0.5, 0.5, -3.538648, -3.943758, 2, 0, 1.5, 0.5, 0.5, -3.538648, -3.943758, 4, 0, -0.5, 0.5, 0.5, -3.538648, -3.943758, 4, 1, -0.5, 0.5, 0.5, -3.538648, -3.943758, 4, 1, 1.5, 0.5, 0.5, -3.538648, -3.943758, 4, 0, 1.5, 0.5, 0.5 ]); for (var i=0; i<6; i++) for (var j=0; j<4; j++) { ind = 7*(4*i + j) + 3; v[ind+2] = 2*(v[ind]-v[ind+2])*texinfo.widths[i]/width; v[ind+3] = 2*(v[ind+1]-v[ind+3])*texinfo.textHeight/height; v[ind] *= texinfo.widths[i]/texinfo.canvasX; v[ind+1] = 1.0-(texinfo.offset + i*texinfo.skip - v[ind+1]*texinfo.textHeight)/texinfo.canvasY; } var f=new Uint16Array([ 0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23 ]); var buf16 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf16); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var ibuf16 = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf16); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, f, gl.STATIC_DRAW); var mvMatLoc16 = gl.getUniformLocation(prog16,"mvMatrix"); var prMatLoc16 = gl.getUniformLocation(prog16,"prMatrix"); // ****** lines object 17 ****** var prog17 = gl.createProgram(); gl.attachShader(prog17, getShader( gl, "testglvshader17" )); gl.attachShader(prog17, getShader( gl, "testglfshader17" )); // Force aPos to location 0, aCol to location 1 gl.bindAttribLocation(prog17, 0, "aPos"); gl.bindAttribLocation(prog17, 1, "aCol"); gl.linkProgram(prog17); var v=new Float32Array([ -3.04745, -3.444757, -6.209377, -3.04745, 3.208599, -6.209377, -3.04745, -3.444757, 5.770821, -3.04745, 3.208599, 5.770821, -3.04745, -3.444757, -6.209377, -3.04745, -3.444757, 5.770821, -3.04745, 3.208599, -6.209377, -3.04745, 3.208599, 5.770821, -3.04745, -3.444757, -6.209377, 3.501848, -3.444757, -6.209377, -3.04745, -3.444757, 5.770821, 3.501848, -3.444757, 5.770821, -3.04745, 3.208599, -6.209377, 3.501848, 3.208599, -6.209377, -3.04745, 3.208599, 5.770821, 3.501848, 3.208599, 5.770821, 3.501848, -3.444757, -6.209377, 3.501848, 3.208599, -6.209377, 3.501848, -3.444757, 5.770821, 3.501848, 3.208599, 5.770821, 3.501848, -3.444757, -6.209377, 3.501848, -3.444757, 5.770821, 3.501848, 3.208599, -6.209377, 3.501848, 3.208599, 5.770821 ]); var buf17 = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buf17); gl.bufferData(gl.ARRAY_BUFFER, v, gl.STATIC_DRAW); var mvMatLoc17 = gl.getUniformLocation(prog17,"mvMatrix"); var prMatLoc17 = gl.getUniformLocation(prog17,"prMatrix"); gl.enable(gl.DEPTH_TEST); gl.depthFunc(gl.LEQUAL); gl.clearDepth(1.0); gl.clearColor(1, 1, 1, 1); var xOffs = yOffs = 0, drag = 0; drawScene(); function drawScene(){ gl.depthMask(true); gl.disable(gl.BLEND); var radius = 8.110277; var s = sin(fov*PI/360); var t = tan(fov*PI/360); var distance = radius/s; var near = distance - radius; var far = distance + radius; var hlen = t*near; var aspect = width/height; prMatrix.makeIdentity(); if (aspect > 1) prMatrix.frustum(-hlen*aspect*zoom, hlen*aspect*zoom, -hlen*zoom, hlen*zoom, near, far); else prMatrix.frustum(-hlen*zoom, hlen*zoom, -hlen*zoom/aspect, hlen*zoom/aspect, near, far); mvMatrix.makeIdentity(); mvMatrix.translate( -0.227199, 0.1180786, 0.2192783 ); mvMatrix.scale( 1.338921, 1.31798, 0.7319571 ); mvMatrix.multRight( userMatrix ); mvMatrix.translate(0, 0, -distance); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // ****** points object 6 ******* gl.useProgram(prog6); gl.bindBuffer(gl.ARRAY_BUFFER, buf6); gl.uniformMatrix4fv( prMatLoc6, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc6, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.enableVertexAttribArray( colLoc ); gl.vertexAttribPointer(colLoc, 4, gl.FLOAT, false, 28, 12); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawArrays(gl.POINTS, 0, 1000); // ****** text object 8 ******* gl.useProgram(prog8); gl.bindBuffer(gl.ARRAY_BUFFER, buf8); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf8); gl.uniformMatrix4fv( prMatLoc8, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc8, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.enableVertexAttribArray( texLoc8 ); gl.vertexAttribPointer(texLoc8, 2, gl.FLOAT, false, 28, 12); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture8); gl.uniform1i( sampler8, 0); gl.enableVertexAttribArray( ofsLoc8 ); gl.vertexAttribPointer(ofsLoc8, 2, gl.FLOAT, false, 28, 20); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0); // ****** text object 9 ******* gl.useProgram(prog9); gl.bindBuffer(gl.ARRAY_BUFFER, buf9); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf9); gl.uniformMatrix4fv( prMatLoc9, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc9, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.enableVertexAttribArray( texLoc9 ); gl.vertexAttribPointer(texLoc9, 2, gl.FLOAT, false, 28, 12); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture9); gl.uniform1i( sampler9, 0); gl.enableVertexAttribArray( ofsLoc9 ); gl.vertexAttribPointer(ofsLoc9, 2, gl.FLOAT, false, 28, 20); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0); // ****** text object 10 ******* gl.useProgram(prog10); gl.bindBuffer(gl.ARRAY_BUFFER, buf10); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf10); gl.uniformMatrix4fv( prMatLoc10, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc10, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.enableVertexAttribArray( texLoc10 ); gl.vertexAttribPointer(texLoc10, 2, gl.FLOAT, false, 28, 12); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture10); gl.uniform1i( sampler10, 0); gl.enableVertexAttribArray( ofsLoc10 ); gl.vertexAttribPointer(ofsLoc10, 2, gl.FLOAT, false, 28, 20); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0); // ****** lines object 11 ******* gl.useProgram(prog11); gl.bindBuffer(gl.ARRAY_BUFFER, buf11); gl.uniformMatrix4fv( prMatLoc11, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc11, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.lineWidth( 1 ); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0); gl.drawArrays(gl.LINES, 0, 14); // ****** text object 12 ******* gl.useProgram(prog12); gl.bindBuffer(gl.ARRAY_BUFFER, buf12); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf12); gl.uniformMatrix4fv( prMatLoc12, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc12, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.enableVertexAttribArray( texLoc12 ); gl.vertexAttribPointer(texLoc12, 2, gl.FLOAT, false, 28, 12); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture12); gl.uniform1i( sampler12, 0); gl.enableVertexAttribArray( ofsLoc12 ); gl.vertexAttribPointer(ofsLoc12, 2, gl.FLOAT, false, 28, 20); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0); // ****** lines object 13 ******* gl.useProgram(prog13); gl.bindBuffer(gl.ARRAY_BUFFER, buf13); gl.uniformMatrix4fv( prMatLoc13, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc13, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.lineWidth( 1 ); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0); gl.drawArrays(gl.LINES, 0, 16); // ****** text object 14 ******* gl.useProgram(prog14); gl.bindBuffer(gl.ARRAY_BUFFER, buf14); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf14); gl.uniformMatrix4fv( prMatLoc14, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc14, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.enableVertexAttribArray( texLoc14 ); gl.vertexAttribPointer(texLoc14, 2, gl.FLOAT, false, 28, 12); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture14); gl.uniform1i( sampler14, 0); gl.enableVertexAttribArray( ofsLoc14 ); gl.vertexAttribPointer(ofsLoc14, 2, gl.FLOAT, false, 28, 20); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawElements(gl.TRIANGLES, 42, gl.UNSIGNED_SHORT, 0); // ****** lines object 15 ******* gl.useProgram(prog15); gl.bindBuffer(gl.ARRAY_BUFFER, buf15); gl.uniformMatrix4fv( prMatLoc15, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc15, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.lineWidth( 1 ); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0); gl.drawArrays(gl.LINES, 0, 14); // ****** text object 16 ******* gl.useProgram(prog16); gl.bindBuffer(gl.ARRAY_BUFFER, buf16); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibuf16); gl.uniformMatrix4fv( prMatLoc16, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc16, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.enableVertexAttribArray( texLoc16 ); gl.vertexAttribPointer(texLoc16, 2, gl.FLOAT, false, 28, 12); gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture16); gl.uniform1i( sampler16, 0); gl.enableVertexAttribArray( ofsLoc16 ); gl.vertexAttribPointer(ofsLoc16, 2, gl.FLOAT, false, 28, 20); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 28, 0); gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0); // ****** lines object 17 ******* gl.useProgram(prog17); gl.bindBuffer(gl.ARRAY_BUFFER, buf17); gl.uniformMatrix4fv( prMatLoc17, false, new Float32Array(prMatrix.getAsArray()) ); gl.uniformMatrix4fv( mvMatLoc17, false, new Float32Array(mvMatrix.getAsArray()) ); gl.enableVertexAttribArray( posLoc ); gl.disableVertexAttribArray( colLoc ); gl.vertexAttrib4f( colLoc, 0, 0, 0, 1 ); gl.lineWidth( 1 ); gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 12, 0); gl.drawArrays(gl.LINES, 0, 24); gl.flush (); } var vlen = function(v) { return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]) } var xprod = function(a, b) { return [a[1]*b[2] - a[2]*b[1], a[2]*b[0] - a[0]*b[2], a[0]*b[1] - a[1]*b[0]]; } var screenToVector = function(x, y) { var radius = max(width, height)/2.0; var cx = width/2.0; var cy = height/2.0; var px = (x-cx)/radius; var py = (y-cy)/radius; var plen = sqrt(px*px+py*py); if (plen > 1.e-6) { px = px/plen; py = py/plen; } var angle = (SQRT2 - plen)/SQRT2*PI/2; var z = sin(angle); var zlen = sqrt(1.0 - z*z); px = px * zlen; py = py * zlen; return [px, py, z]; } var rotBase; var trackballdown = function(x,y) { rotBase = screenToVector(x, y); saveMat.load(userMatrix); } var trackballmove = function(x,y) { var rotCurrent = screenToVector(x,y); var dot = rotBase[0]*rotCurrent[0] + rotBase[1]*rotCurrent[1] + rotBase[2]*rotCurrent[2]; var angle = acos( dot/vlen(rotBase)/vlen(rotCurrent) )*180./PI; var axis = xprod(rotBase, rotCurrent); userMatrix.load(saveMat); userMatrix.rotate(angle, axis[0], axis[1], axis[2]); drawScene(); } var y0zoom = 0; var zoom0 = 1; var zoomdown = function(x, y) { y0zoom = y; zoom0 = log(zoom); } var zoommove = function(x, y) { zoom = exp(zoom0 + (y-y0zoom)/height); drawScene(); } var y0fov = 0; var fov0 = 1; var fovdown = function(x, y) { y0fov = y; fov0 = fov; } var fovmove = function(x, y) { fov = max(1, min(179, fov0 + 180*(y-y0fov)/height)); drawScene(); } var mousedown = [trackballdown, zoomdown, fovdown]; var mousemove = [trackballmove, zoommove, fovmove]; function relMouseCoords(event){ var totalOffsetX = 0; var totalOffsetY = 0; var currentElement = canvas; do{ totalOffsetX += currentElement.offsetLeft; totalOffsetY += currentElement.offsetTop; } while(currentElement = currentElement.offsetParent) var canvasX = event.pageX - totalOffsetX; var canvasY = event.pageY - totalOffsetY; return {x:canvasX, y:canvasY} } canvas.onmousedown = function ( ev ){ if (!ev.which) // Use w3c defns in preference to MS switch (ev.button) { case 0: ev.which = 1; break; case 1: case 4: ev.which = 2; break; case 2: ev.which = 3; } drag = ev.which; var f = mousedown[drag-1]; if (f) { var coords = relMouseCoords(ev); f(coords.x, height-coords.y); ev.preventDefault(); } } canvas.onmouseup = function ( ev ){ drag = 0; } canvas.onmouseout = canvas.onmouseup; canvas.onmousemove = function ( ev ){ if ( drag == 0 ) return; var f = mousemove[drag-1]; if (f) { var coords = relMouseCoords(ev); f(coords.x, height-coords.y); } } var wheelHandler = function(ev) { var del = 1.1; if (ev.shiftKey) del = 1.01; var ds = ((ev.detail || ev.wheelDelta) > 0) ? del : (1 / del); zoom *= ds; drawScene(); ev.preventDefault(); }; canvas.addEventListener("DOMMouseScroll", wheelHandler, false); canvas.addEventListener("mousewheel", wheelHandler, false); } </script>

testglsnapshot
You must enable Javascript to view this page properly.

<script>testglwebGLStart();</script>
---
title: RGL in Slidify
framework: io2012
---
```{r setup}
knit_hooks$set(webgl = hook_webgl)
```
```{r testgl, webgl = TRUE}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment