Browse Source

Merge branch 'dev' of https://github.com/mrdoob/three.js into dev

Brent Van Minnen 11 years ago
parent
commit
18993868e3

+ 11 - 11
docs/api/math/Box2.html

@@ -43,7 +43,7 @@
 
 
 
 
 
 
-		<h3>.set([page:Vector2 min], [page:Vector2 max]) [page:todo]</h3>
+		<h3>.set([page:Vector2 min], [page:Vector2 max]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		min -- Lower (x, y) boundary of the box. <br />
 		min -- Lower (x, y) boundary of the box. <br />
 		max -- Upper (x, y) boundary of the box.
 		max -- Upper (x, y) boundary of the box.
@@ -52,7 +52,7 @@
 		Sets the lower and upper (x, y) boundaries of this box.
 		Sets the lower and upper (x, y) boundaries of this box.
 		</div>
 		</div>
 
 
-		<h3>.expandByPoint([page:Vector2 point]) [page:Box2]</h3>
+		<h3>.expandByPoint([page:Vector2 point]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		point -- Point that should be included in the box.
 		point -- Point that should be included in the box.
 		</div>
 		</div>
@@ -77,7 +77,7 @@
 		Determines whether or not this box intersects *box*.
 		Determines whether or not this box intersects *box*.
 		</div>
 		</div>
 
 
-		<h3>.setFromPoints([page:Array points]) [page:Box2]</h3>
+		<h3>.setFromPoints([page:Array points]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		points -- Set of points that the resulting box will envelop.
 		points -- Set of points that the resulting box will envelop.
 		</div>
 		</div>
@@ -93,7 +93,7 @@
 		Returns the width and height of this box.
 		Returns the width and height of this box.
 		</div>
 		</div>
 
 
-		<h3>.union([page:Box2 box]) [page:Box2]</h3>
+		<h3>.union([page:Box2 box]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		box -- Box that will be unioned with this box.
 		box -- Box that will be unioned with this box.
 		</div>
 		</div>
@@ -111,7 +111,7 @@
 		Returns point as a proportion of this box's width and height.
 		Returns point as a proportion of this box's width and height.
 		</div>
 		</div>
 
 
-		<h3>.expandByScalar([page:float scalar]) [page:Box2]</h3>
+		<h3>.expandByScalar([page:float scalar]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		scalar -- Distance to expand.
 		scalar -- Distance to expand.
 		</div>
 		</div>
@@ -120,7 +120,7 @@
 		will be contracted.
 		will be contracted.
 		</div>
 		</div>
 
 
-		<h3>.intersect([page:Box2 box]) [page:Box2]</h3>
+		<h3>.intersect([page:Box2 box]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		box -- Box to intersect with.
 		box -- Box to intersect with.
 		</div>
 		</div>
@@ -139,7 +139,7 @@
 		this function also returns true. 
 		this function also returns true. 
 		</div>
 		</div>
 
 
-		<h3>.translate([page:Vector2 offset]) [page:Box2]</h3>
+		<h3>.translate([page:Vector2 offset]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		offset -- Direction and distance of offset.
 		offset -- Direction and distance of offset.
 		</div>
 		</div>
@@ -168,7 +168,7 @@
 		Returns true if this box and *box* share the same lower and upper bounds.
 		Returns true if this box and *box* share the same lower and upper bounds.
 		</div>
 		</div>
 
 
-		<h3>.expandByVector([page:Vector2 vector]) [page:Box2]</h3>
+		<h3>.expandByVector([page:Vector2 vector]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		vector -- Amount to expand this box in each dimension.
 		vector -- Amount to expand this box in each dimension.
 		</div>
 		</div>
@@ -178,7 +178,7 @@
 		this box will be expanded by the y component of *vector* in both directions.
 		this box will be expanded by the y component of *vector* in both directions.
 		</div>
 		</div>
 
 
-		<h3>.copy([page:Box2 box]) [page:Box2]</h3>
+		<h3>.copy([page:Box2 box]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		box -- Box to copy.
 		box -- Box to copy.
 		</div>
 		</div>
@@ -186,7 +186,7 @@
 		Copies the values of *box* to this box.
 		Copies the values of *box* to this box.
 		</div>
 		</div>
 
 
-		<h3>.makeEmpty() [page:Box2]</h3>
+		<h3>.makeEmpty() [page:Box2 this]</h3>
 		<div>
 		<div>
 		Makes this box empty.
 		Makes this box empty.
 		</div>
 		</div>
@@ -216,7 +216,7 @@
 		Returns true if the specified point lies within the boundaries of this box.
 		Returns true if the specified point lies within the boundaries of this box.
 		</div>
 		</div>
 
 
-		<h3>.setFromCenterAndSize([page:Vector2 center], [page:Vector2 size]) [page:Box2]</h3>
+		<h3>.setFromCenterAndSize([page:Vector2 center], [page:Vector2 size]) [page:Box2 this]</h3>
 		<div>
 		<div>
 		center -- Desired center position of the box. <br />
 		center -- Desired center position of the box. <br />
 		size -- Desired x and y dimensions of the box. 
 		size -- Desired x and y dimensions of the box. 

+ 15 - 18
docs/api/math/Box3.html

@@ -9,19 +9,19 @@
 	<body>
 	<body>
 		<h1>[name]</h1>
 		<h1>[name]</h1>
 
 
-		<div class="desc">todo</div>
+		<div class="desc">Represents a boundary box in 3d space.</div>
 
 
 
 
 		<h2>Constructor</h2>
 		<h2>Constructor</h2>
 
 
 
 
-		<h3>[name]([page:todo min], [page:todo max])</h3>
+		<h3>[name]([page:Vector3 min], [page:Vector3 max])</h3>
 		<div>
 		<div>
-		min -- todo <br />
-		max -- todo
+		min -- Lower (x, y, z) boundary of the box.  <br />
+		max -- Upper (x, y, z) boundary of the box.
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Creates a box bounded by min and max
 		</div>
 		</div>
 
 
 		<h2>Properties</h2>
 		<h2>Properties</h2>
@@ -30,44 +30,41 @@
 
 
 		<h3>.[page:Vector3 max]</h3>
 		<h3>.[page:Vector3 max]</h3>
 		<div>
 		<div>
-		todo
+		Upper (x, y, z) boundary of this box.
 		</div> 
 		</div> 
 
 
 		<h3>.[page:Vector3 min]</h3>
 		<h3>.[page:Vector3 min]</h3>
 		<div>
 		<div>
-		todo
+		Lower (x, y, z) boundary of this box.
 		</div> 
 		</div> 
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
 
 
 
 
-		<h3>.set([page:todo min], [page:todo max]) [page:todo]</h3>
+		<h3>.set([page:Vector3 min], [page:Vector3 max]) [page:Box3 this]</h3>
 		<div>
 		<div>
-		min -- todo <br />
-		max -- todo
+		min -- Upper (x, y, z) boundary of this box. <br />
+		max -- Lower (x, y, z) boundary of this box.
 		</div>
 		</div>
 		<div>
 		<div>
 		todo
 		todo
 		</div>
 		</div>
 
 
-		<h3>.applyMatrix4([page:todo matrix]) [page:todo]</h3>
+		<h3>.applyMatrix4([page:Matrix4 matrix]) [page:Box3 this]</h3>
 		<div>
 		<div>
-		matrix -- todo
+		matrix -- Transform the box with a matrix.
 		</div>
 		</div>
 		<div>
 		<div>
 		todo
 		todo
 		</div>
 		</div>
 
 
-		<h3>.expandByPoint([page:todo point]) [page:todo]</h3>
+		<h3>.expandByPoint([page:Vector3 point]) [page:Box3 this]</h3>
 		<div>
 		<div>
-		point -- todo
-		</div>
-		<div>
-		todo
+		Expands the box outwards by the point. It takes the min and max values of the box.
 		</div>
 		</div>
 
 
-		<h3>.clampPoint([page:todo point], [page:todo optionalTarget]) [page:todo]</h3>
+		<h3>.clampPoint([page:Vector3 point], [page:todo optionalTarget]) [page:todo]</h3>
 		<div>
 		<div>
 		point -- todo <br />
 		point -- todo <br />
 		optionalTarget -- todo
 		optionalTarget -- todo

+ 19 - 19
docs/api/math/Color.html

@@ -47,7 +47,7 @@
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
-		<h3>.copy( [page:Color color] ) [page:this]</h3>
+		<h3>.copy( [page:Color color] ) [page:Color this]</h3>
 		<div>
 		<div>
 		color — Color to copy.
 		color — Color to copy.
 		</div>
 		</div>
@@ -55,7 +55,7 @@
 		Copies given color.
 		Copies given color.
 		</div>
 		</div>
 
 
-		<h3>.copyGammaToLinear( [page:Color color] ) [page:this]</h3>
+		<h3>.copyGammaToLinear( [page:Color color] ) [page:Color this]</h3>
 		<div>
 		<div>
 		color — Color to copy.
 		color — Color to copy.
 		</div>
 		</div>
@@ -63,7 +63,7 @@
 		Copies given color making conversion from gamma to linear space.
 		Copies given color making conversion from gamma to linear space.
 		</div>
 		</div>
 
 
-		<h3>.copyLinearToGamma( [page:Color color] ) [page:this]</h3>
+		<h3>.copyLinearToGamma( [page:Color color] ) [page:Color this]</h3>
 		<div>
 		<div>
 		color — Color to copy.
 		color — Color to copy.
 		</div>
 		</div>
@@ -71,17 +71,17 @@
 		Copies given color making conversion from linear to gamma space.
 		Copies given color making conversion from linear to gamma space.
 		</div>
 		</div>
 
 
-		<h3>.convertGammaToLinear() [page:this]</h3>
+		<h3>.convertGammaToLinear() [page:Color this]</h3>
 		<div>
 		<div>
 		Converts this color from gamma to linear space.
 		Converts this color from gamma to linear space.
 		</div>
 		</div>
 
 
-		<h3>.convertLinearToGamma() [page:this]</h3>
+		<h3>.convertLinearToGamma() [page:Color this]</h3>
 		<div>
 		<div>
 		Converts this color from linear to gamma space.
 		Converts this color from linear to gamma space.
 		</div>
 		</div>
 
 
-		<h3>.setRGB( [page:Float r], [page:Float g], [page:Float b] ) [page:this]</h3>
+		<h3>.setRGB( [page:Float r], [page:Float g], [page:Float b] ) [page:Color this]</h3>
 		<div>
 		<div>
 		r — Red channel value between 0 and 1.<br />
 		r — Red channel value between 0 and 1.<br />
 		g — Green channel value between 0 and 1.<br />
 		g — Green channel value between 0 and 1.<br />
@@ -101,7 +101,7 @@
 		Returns the string formated hexadecimal value of this color.
 		Returns the string formated hexadecimal value of this color.
 		</div>
 		</div>
 
 
-		<h3>.setHex( [page:Integer hex] ) [page:this]</h3>
+		<h3>.setHex( [page:Integer hex] ) [page:Color this]</h3>
 		<div>
 		<div>
 		hex — Color in hexadecimal.<br />
 		hex — Color in hexadecimal.<br />
 		</div>
 		</div>
@@ -109,7 +109,7 @@
 		Sets this color from a hexadecimal value.
 		Sets this color from a hexadecimal value.
 		</div>
 		</div>
 
 
-		<h3>.setStyle( [page:String style] ) [page:this]</h3>
+		<h3>.setStyle( [page:String style] ) [page:Color this]</h3>
 		<div>
 		<div>
 		style — color as a CSS-style string, for example, "rgb(250, 0,0)", "rgb(100%,0%,0%)", "#ff0000", "#f00", or "red"
 		style — color as a CSS-style string, for example, "rgb(250, 0,0)", "rgb(100%,0%,0%)", "#ff0000", "#f00", or "red"
 		</div>
 		</div>
@@ -122,7 +122,7 @@
 		Returns the value of this color as a CSS-style string. Example: rgb(255,0,0)
 		Returns the value of this color as a CSS-style string. Example: rgb(255,0,0)
 		</div>
 		</div>
 
 
-		<h3>.setHSL( [page:Float h], [page:Float s], [page:Float l] ) [page:this]</h3>
+		<h3>.setHSL( [page:Float h], [page:Float s], [page:Float l] ) [page:Color this]</h3>
 		<div>
 		<div>
 		h — hue value between 0.0 and 1.0 <br />
 		h — hue value between 0.0 and 1.0 <br />
 		s — saturation value between 0.0 and 1.0 <br />
 		s — saturation value between 0.0 and 1.0 <br />
@@ -137,37 +137,37 @@
 		Returns an object with properties h, s, and l.
 		Returns an object with properties h, s, and l.
 		</div>
 		</div>
 
 
-		<h3>.offsetHSL( [page:Float h], [page:Float s], [page:Float l] ) [page:this]</h3>
+		<h3>.offsetHSL( [page:Float h], [page:Float s], [page:Float l] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Adds given h, s, and l to this color's existing h, s, and l values.
 		Adds given h, s, and l to this color's existing h, s, and l values.
 		</div>
 		</div>
 
 
-		<h3>.add ( [page:Color color] ) [page:this]</h3>
+		<h3>.add ( [page:Color color] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Adds rgb values of given color to rgb values of this color
 		Adds rgb values of given color to rgb values of this color
 		</div>
 		</div>
 
 
-		<h3>.addColors( [page:Color color1], [page:Color color2] ) [page:this]</h3>
+		<h3>.addColors( [page:Color color1], [page:Color color2] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Sets this color to the sum of color1 and color2
 		Sets this color to the sum of color1 and color2
 		</div>
 		</div>
 
 
-		<h3>.addScalar( [page:Number s] ) [page:this]</h3>
+		<h3>.addScalar( [page:Number s] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Adds s to the rgb values of this color
 		Adds s to the rgb values of this color
 		</div>
 		</div>
 
 
-		<h3>.multiply( [page:Color color] ) [page:this]</h3>
+		<h3>.multiply( [page:Color color] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Multiplies this color's rgb values by given color's rgb values
 		Multiplies this color's rgb values by given color's rgb values
 		</div>
 		</div>
 
 
-		<h3>.multiplyScalar( [page:Number s] ) [page:this]</h3>
+		<h3>.multiplyScalar( [page:Number s] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Multiplies this color's rgb values by s
 		Multiplies this color's rgb values by s
 		</div>
 		</div>
 
 
-		<h3>.lerp( [page:Color color], alpha ) [page:this]</h3>
+		<h3>.lerp( [page:Color color], alpha ) [page:Color this]</h3>
 		<div>
 		<div>
 		alpha -- a number between 0 and 1.
 		alpha -- a number between 0 and 1.
 		</div>
 		</div>
@@ -175,7 +175,7 @@
 		Linear interpolation of this colors rgb values and the rgb values of the first argument. The alpha argument can be thought of as the percent between the two colors, where 0 is this color and 1 is the first argument.
 		Linear interpolation of this colors rgb values and the rgb values of the first argument. The alpha argument can be thought of as the percent between the two colors, where 0 is this color and 1 is the first argument.
 		</div>
 		</div>
 
 
-		<h3>.equals( [page:Color c] ) [page:this]</h3>
+		<h3>.equals( [page:Color c] ) [page:Color this]</h3>
 		<div>
 		<div>
 		Compares this color and c and returns true if they are the same, false otherwise.
 		Compares this color and c and returns true if they are the same, false otherwise.
 		</div>
 		</div>
@@ -185,9 +185,9 @@
 		Clones this color.
 		Clones this color.
 		</div>
 		</div>
 
 
-		<h3>.set([page:todo value]) [page:this]</h3>
+		<h3>.set( value ) [page:Color this]</h3>
 		<div>
 		<div>
-		value -- either an instance of Color, a hexadecimal value, or a css style string
+		value -- either an instance of [page:Color], a [page:Integer hexadecimal] value, or a css style [page:String string]
 		</div>
 		</div>
 		<div>
 		<div>
 		Delegates to .copy, .setStyle, or .setHex depending on input type.
 		Delegates to .copy, .setStyle, or .setHex depending on input type.

+ 17 - 14
docs/api/math/Euler.html

@@ -9,7 +9,10 @@
   <body>
   <body>
     <h1>[name]</h1>
     <h1>[name]</h1>
 
 
-    <div class="desc">Euler Angles.</div>
+    <div class="desc">Euler Angles. <br/><br/>
+    
+    Euler angles describe a rotation transformation by rotating an object on its various axes in specified amounts per axis, and a specified axis order.
+    (More information on <a href='http://en.wikipedia.org/wiki/Euler_angles' target='blank'>Wikipedia</a>)</div>
 
 
     <h2>Example</h2>
     <h2>Example</h2>
 
 
@@ -22,11 +25,11 @@
     <h2>Constructor</h2>
     <h2>Constructor</h2>
 
 
 
 
-    <h3>[name]( [page:Float x], [page:Float y], [page:Float z], [page:String Order] )</h3>
+    <h3>[name]( [page:Float x], [page:Float y], [page:Float z], [page:String order] )</h3>
     <div>
     <div>
-    x -- [page:Float] the angle of the x axis<br />
-    y -- [page:Float] the angle of the y axis<br />
-    z -- [page:Float] the angle of the z axis<br />
+    x -- [page:Float] the angle of the x axis in radians<br />
+    y -- [page:Float] the angle of the y axis in radians<br />
+    z -- [page:Float] the angle of the z axis in radians<br />
     order -- [page:String] A string representing the order that the rotations are applied, defaults to 'XYZ' (must be upper case).
     order -- [page:String] A string representing the order that the rotations are applied, defaults to 'XYZ' (must be upper case).
     </div>
     </div>
     <div>
     <div>
@@ -48,23 +51,23 @@
 
 
     <h2>Methods</h2>
     <h2>Methods</h2>
 
 
-    <h3>.set( [page:Float x], [page:Float y], [page:Float z], [page:String order] ) [page:this]</h3>
+    <h3>.set( [page:Float x], [page:Float y], [page:Float z], [page:String order] ) [page:Euler this]</h3>
     <div>
     <div>
-    x -- [page:Float] Angle in x axis<br />
-    x -- [page:Float] Angle in x axis<br />
-    x -- [page:Float] Angle in x axis<br />
+    x -- [page:Float] Angle in x axis in radians<br />
+    x -- [page:Float] Angle in x axis in radians<br />
+    x -- [page:Float] Angle in x axis in radians<br />
     order -- [page:string] Order of axes, defaults to 'XYZ' (must be upper case)
     order -- [page:string] Order of axes, defaults to 'XYZ' (must be upper case)
     </div>
     </div>
     <div>
     <div>
     Sets the angles of this euler transform.
     Sets the angles of this euler transform.
     </div>
     </div>
 
 
-    <h3>.copy( [page:Euler euler] ) [page:this]</h3>
+    <h3>.copy( [page:Euler euler] ) [page:Euler this]</h3>
     <div>
     <div>
     Copies value of *euler* to this euler.
     Copies value of *euler* to this euler.
     </div>
     </div>
 
 
-    <h3>.setFromRotationMatrix( [page:Matrix4 m], [page:String order] ) [page:this]</h3>
+    <h3>.setFromRotationMatrix( [page:Matrix4 m], [page:String order] ) [page:Euler this]</h3>
     <div>
     <div>
     m -- [page:Matrix4] assumes upper 3x3 of matrix is a pure rotation matrix (i.e. unscaled)<br />
     m -- [page:Matrix4] assumes upper 3x3 of matrix is a pure rotation matrix (i.e. unscaled)<br />
     order -- [page:string] Order of axes, defaults to 'XYZ' (must be upper case)
     order -- [page:string] Order of axes, defaults to 'XYZ' (must be upper case)
@@ -73,7 +76,7 @@
     Sets the angles of this euler transform from a pure rotation matrix based on the orientation specified by order.
     Sets the angles of this euler transform from a pure rotation matrix based on the orientation specified by order.
     </div>
     </div>
 
 
-    <h3>.setFromQuaternion( [page:Quaternion q], [page:String order] ) [page:this]</h3>
+    <h3>.setFromQuaternion( [page:Quaternion q], [page:String order] ) [page:Euler this]</h3>
     <div>
     <div>
     q -- [page:Quaternion] quaternion must be normalized<br />
     q -- [page:Quaternion] quaternion must be normalized<br />
     order -- [page:string] Order of axes, defaults to 'XYZ' (must be upper case)
     order -- [page:string] Order of axes, defaults to 'XYZ' (must be upper case)
@@ -82,13 +85,13 @@
     Sets the angles of this euler transform from a normalized quaternion based on the orientation specified by order.
     Sets the angles of this euler transform from a normalized quaternion based on the orientation specified by order.
     </div>
     </div>
 
 
-    <h3>.reorder( [page:String newOrder] ) [page:this]</h3>
+    <h3>.reorder( [page:String newOrder] ) [page:Euler this]</h3>
     <div>
     <div>
     Resets the euler angle with a new order by creating a quaternion from this euler angle and then setting this euler angle with the quaternion and the new order. <br />
     Resets the euler angle with a new order by creating a quaternion from this euler angle and then setting this euler angle with the quaternion and the new order. <br />
     WARNING: this discards revolution information.
     WARNING: this discards revolution information.
     </div>
     </div>
 
 
-    <h3>.fromArray([page:Array array]) [page:this]</h3>
+    <h3>.fromArray([page:Array array]) [page:Euler this]</h3>
     <div>
     <div>
     array -- [page:Array] of length 3 or 4. array[3] is an optional order argument.
     array -- [page:Array] of length 3 or 4. array[3] is an optional order argument.
     </div>
     </div>

+ 26 - 26
docs/api/math/Frustum.html

@@ -15,17 +15,17 @@
 		<h2>Constructor</h2>
 		<h2>Constructor</h2>
 
 
 
 
-		<h3>[name]([page:todo p0], [page:todo p1], [page:todo p2], [page:todo p3], [page:todo p4], [page:todo p5])</h3>
+		<h3>[name]([page:Plane p0], [page:Plane p1], [page:Plane p2], [page:Plane p3], [page:Plane p4], [page:Plane p5])</h3>
 		<div>
 		<div>
-		p0 -- todo <br />
-		p1 -- todo <br />
-		p2 -- todo <br />
-		p3 -- todo <br />
-		p4 -- todo <br />
-		p5 -- todo
+		p0 -- [page:Plane] <br />
+		p1 -- [page:Plane] <br />
+		p2 -- [page:Plane] <br />
+		p3 -- [page:Plane] <br />
+		p4 -- [page:Plane] <br />
+		p5 -- [page:Plane]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Creates a frustum from the designated planes.
 		</div>
 		</div>
 
 
 
 
@@ -33,7 +33,7 @@
 
 
 		<h3>.[page:Array planes]</h3>
 		<h3>.[page:Array planes]</h3>
 		<div>
 		<div>
-		Array of 6 [page:Vector4 vectors].
+		Array of 6 [page:Plane planes].
 		</div>
 		</div>
 
 
 
 
@@ -46,46 +46,46 @@
 		Checks whether the object is inside the Frustum.
 		Checks whether the object is inside the Frustum.
 		</div>
 		</div>
 
 
-		<h3>.clone() [page:todo]</h3>
+		<h3>.clone() [page:Frustum]</h3>
 		<div>
 		<div>
-		todo
+		Return a copy of this Frustum
 		</div>
 		</div>
 
 
-		<h3>.set([page:todo p0], [page:todo p1], [page:todo p2], [page:todo p3], [page:todo p4], [page:todo p5]) [page:todo]</h3>
+		<h3>.set([page:Plane p0], [page:Plane p1], [page:Plane p2], [page:Plane p3], [page:Plane p4], [page:Plane p5]) [page:Boolean]</h3>
 		<div>
 		<div>
-		p0 -- todo <br />
-		p1 -- todo <br />
-		p2 -- todo <br />
-		p3 -- todo <br />
-		p4 -- todo <br />
-		p5 -- todo
+		p0 -- [page:Plane] <br />
+		p1 -- [page:Plane] <br />
+		p2 -- [page:Plane] <br />
+		p3 -- [page:Plane] <br />
+		p4 -- [page:Plane] <br />
+		p5 -- [page:Plane]
 		</div>
 		</div>
 		<div>
 		<div>
 		todo
 		todo
 		</div>
 		</div>
 
 
-		<h3>.copy([page:todo frustum]) [page:todo]</h3>
+		<h3>.copy([page:Frustum frustum]) [page:Frustum this]</h3>
 		<div>
 		<div>
-		frustum -- todo
+		frustum -- The frustum to copy
 		</div>
 		</div>
 		<div>
 		<div>
 		todo
 		todo
 		</div>
 		</div>
 
 
-		<h3>.containsPoint([page:todo point]) [page:todo]</h3>
+		<h3>.containsPoint([page:Vector3 point]) [page:Boolean]</h3>
 		<div>
 		<div>
-		point -- todo
+		point -- [page:Vector3] to test
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Checks to see if the frustum contains the point.
 		</div>
 		</div>
 
 
-		<h3>.intersectsSphere([page:todo sphere]) [page:todo]</h3>
+		<h3>.intersectsSphere([page:Sphere sphere]) [page:Boolean]</h3>
 		<div>
 		<div>
-		sphere -- todo
+		sphere -- [page:Sphere]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Check to see if the sphere intersects with the frustum.
 		</div>
 		</div>
 
 
 		<h2>Source</h2>
 		<h2>Source</h2>

+ 19 - 17
docs/api/math/Math.html

@@ -72,42 +72,44 @@
 		Returns -1 if *x* is less than 0, 1 if *x* is greater than 0, and 0 if *x* is zero.
 		Returns -1 if *x* is less than 0, 1 if *x* is greater than 0, and 0 if *x* is zero.
 		</div>
 		</div>
 
 
-		<h3>.degToRad([page:todo degrees]) [page:todo]</h3>
+		<h3>.degToRad([page:Float degrees]) [page:Float]</h3>
 		<div>
 		<div>
-		degrees -- todo
+		degrees -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Converts degrees to radians.
 		</div>
 		</div>
 
 
-		<h3>.smoothstep([page:todo x], [page:todo min], [page:todo max]) [page:todo]</h3>
+		<h3>.radToDeg([page:Float radians]) [page:Float]</h3>
 		<div>
 		<div>
-		x -- todo <br />
-		min -- todo <br />
-		max -- todo
+		radians -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Converts radians to degrees
 		</div>
 		</div>
 
 
-		<h3>.smootherstep([page:todo x], [page:todo min], [page:todo max]) [page:todo]</h3>
+		<h3>.smoothstep([page:Float x], [page:Float min], [page:Float max]) [page:Float]</h3>
 		<div>
 		<div>
-		x -- todo <br />
-		min -- todo <br />
-		max -- todo
+		x -- The value to evaluate based on its position between min and max. <br />
+		min -- Any x value below min will be 0 <br />
+		max -- Any x value above max will be 1
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Returns a value between 0-1 that represents the percentage that x has moved between min and max, but smoothed or slowed down the closer X is to the min and max.<br/><br/>
+		
+		[link:http://en.wikipedia.org/wiki/Smoothstep Wikipedia]
 		</div>
 		</div>
 
 
-		<h3>.radToDeg([page:todo radians]) [page:todo]</h3>
+		<h3>.smootherstep([page:Float x], [page:Float min], [page:Float max]) [page:Float]</h3>
 		<div>
 		<div>
-		radians -- todo
+		x -- The value to evaluate based on its position between min and max. <br />
+		min -- Any x value below min will be 0 <br />
+		max --  Any x value above max will be 1
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Returns a value between 0-1. It works the same as smoothstep, but more smooth.
 		</div>
 		</div>
-
+		
 		<h2>Source</h2>
 		<h2>Source</h2>
 
 
 		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
 		[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]

+ 58 - 45
docs/api/math/Matrix3.html

@@ -15,20 +15,26 @@
 		<h2>Constructor</h2>
 		<h2>Constructor</h2>
 
 
 
 
-		<h3>[name]([page:todo n11], [page:todo n12], [page:todo n13], [page:todo n21], [page:todo n22], [page:todo n23], [page:todo n31], [page:todo n32], [page:todo n33])</h3>
+		<h3>[name]([page:Float n11], [page:Float n12], [page:Float n13], [page:Float n21], [page:Float n22], [page:Float n23], [page:Float n31], [page:Float n32], [page:Float n33])</h3>
 		<div>
 		<div>
-		n11 -- todo <br />
-		n12 -- todo <br />
-		n13 -- todo <br />
-		n21 -- todo <br />
-		n22 -- todo <br />
-		n23 -- todo <br />
-		n31 -- todo <br />
-		n32 -- todo <br />
-		n33 -- todo
+		n11 -- [page:Float] <br />
+		n12 -- [page:Float] <br />
+		n13 -- [page:Float] <br />
+		n21 -- [page:Float] <br />
+		n22 -- [page:Float] <br />
+		n23 -- [page:Float] <br />
+		n31 -- [page:Float] <br />
+		n32 -- [page:Float] <br />
+		n33 -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		Initialize the 3x3 matrix with a row-major sequence of values.
+		Initialize the 3x3 matrix with a row-major sequence of values.<br/><br/>
+		
+		n11, n12, n13,<br/>
+		n21, n22, n23,<br/>
+		n31, n32, n33<br/><br/>
+		
+		If no values are sent the matrix will be initialized as an identity matrix.
 		</div>
 		</div>
 
 
 
 
@@ -48,82 +54,89 @@
 		Transposes this matrix in place.
 		Transposes this matrix in place.
 		</div>
 		</div>
 
 
-		<h3>.transposeIntoArray( [page:Array r] ) [page:Matrix3]</h3>
+		<h3>.transposeIntoArray( [page:Array array] ) [page:Matrix3]</h3>
 		<div>
 		<div>
-		Transposes this matrix into the supplied array *r*, and returns itself.
+		array -- [page:Array] <br />
+		</div>
+		<div>
+		Transposes this matrix into the supplied array, and returns itself.
 		</div>
 		</div>
 
 
 
 
-		<h3>.determinant() [page:todo]</h3>
+		<h3>.determinant() [page:Float]</h3>
 		<div>
 		<div>
-		todo
+		Returns the matrix's determinant.
 		</div>
 		</div>
 
 
-		<h3>.set([page:todo n11], [page:todo n12], [page:todo n13], [page:todo n21], [page:todo n22], [page:todo n23], [page:todo n31], [page:todo n32], [page:todo n33]) [page:todo]</h3>
+		<h3>.set([page:Float n11], [page:Float n12], [page:Float n13], [page:Float n21], [page:Float n22], [page:Float n23], [page:Float n31], [page:Float n32], [page:Float n33]) [page:Matrix3 this]</h3>
 		<div>
 		<div>
-		n11 -- todo <br />
-		n12 -- todo <br />
-		n13 -- todo <br />
-		n21 -- todo <br />
-		n22 -- todo <br />
-		n23 -- todo <br />
-		n31 -- todo <br />
-		n32 -- todo <br />
-		n33 -- todo
+		n11 -- [page:Float] <br />
+		n12 -- [page:Float] <br />
+		n13 -- [page:Float] <br />
+		n21 -- [page:Float] <br />
+		n22 -- [page:Float] <br />
+		n23 -- [page:Float] <br />
+		n31 -- [page:Float] <br />
+		n32 -- [page:Float] <br />
+		n33 -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		Set the 3x3 matrix values to the given row-major sequence of values.
 		Set the 3x3 matrix values to the given row-major sequence of values.
 		</div>
 		</div>
 
 
-		<h3>.multiplyScalar([page:todo s]) [page:todo]</h3>
+		<h3>.multiplyScalar([page:Float scalar]) [page:Matrix3 this]</h3>
 		<div>
 		<div>
-		s -- todo
+		scalar -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Multiply every component of the matrix by a scalar value.
 		</div>
 		</div>
 
 
-		<h3>.multiplyVector3Array([page:todo a]) [page:todo]</h3>
+		<h3>.multiplyVector3Array([page:Array array]) [page:Array]</h3>
 		<div>
 		<div>
-		a -- todo
+		array -- An array in the form [vector1x, vector1y, vector1z, vector2x, vector2y, vector2z, ...]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Multiply (apply) this matrix against every vector3 in the array.
 		</div>
 		</div>
 
 
-		<h3>.getNormalMatrix([page:todo m]) [page:todo]</h3>
+		<h3>.getNormalMatrix([page:Matrix4 matrix4]) [page:Matrix3 this]</h3>
 		<div>
 		<div>
-		m -- todo
+		matrix4 -- [page:Matrix4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Set this matrix as the normal matrix of the passed [page:Matrix4 matrix4]. The normal matrix is the inverse transpose of the matrix.
 		</div>
 		</div>
 
 
-		<h3>.getInverse([page:todo matrix], [page:todo throwOnInvertible]) [page:todo]</h3>
+		<h3>.getInverse([page:Matrix4 matrix4], [page:Boolean throwOnInvertible]) [page:Matrix3 this]</h3>
 		<div>
 		<div>
-		matrix -- todo <br />
-		throwOnInvertible -- todo
+		matrix4 -- [page:Matrix4] <br />
+		throwOnInvertible -- [Page:Boolean] If true, throw an error if the matrix is invertible.
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Set this matrix to the inverse of the passed matrix.
 		</div>
 		</div>
 
 
-		<h3>.copy([page:todo m]) [page:todo]</h3>
+		<h3>.copy([page:Matrix3 matrix]) [page:Matrix3 this]</h3>
 		<div>
 		<div>
-		m -- todo
+		matrix -- [page:Matrix3]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Copy the values of the passed matrix.
 		</div>
 		</div>
 
 
-		<h3>.clone() [page:todo]</h3>
+		<h3>.clone() [page:Matrix3]</h3>
 		<div>
 		<div>
-		todo
+		Create a copy of the matrix.
 		</div>
 		</div>
 
 
-		<h3>.identity() [page:todo]</h3>
+		<h3>.identity() [page:Matrix3 this]</h3>
 		<div>
 		<div>
-		todo
+		Set as an identity matrix.<br/><br/>
+		
+		1, 0, 0<br/>
+		0, 1, 0<br/>
+		0, 0, 1<br/>
 		</div>
 		</div>
 
 
 		<h2>Source</h2>
 		<h2>Source</h2>

+ 31 - 31
docs/api/math/Matrix4.html

@@ -51,53 +51,53 @@
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
-		<h3>.set( [page:Float n11], [page:Float n12], [page:Float n13], [page:Float n14], [page:Float n21], [page:Float n22], [page:Float n23], [page:Float n24], [page:Float n31], [page:Float n32], [page:Float n33], [page:Float n34], [page:Float n41], [page:Float n42], [page:Float n43], [page:Float n44] ) [page:Matrix4]</h3>
+		<h3>.set( [page:Float n11], [page:Float n12], [page:Float n13], [page:Float n14], [page:Float n21], [page:Float n22], [page:Float n23], [page:Float n24], [page:Float n31], [page:Float n32], [page:Float n33], [page:Float n34], [page:Float n41], [page:Float n42], [page:Float n43], [page:Float n44] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets all fields of this matrix to the supplied row-major values n11..n44.
 		Sets all fields of this matrix to the supplied row-major values n11..n44.
 		</div>
 		</div>
 
 
-		<h3>.identity() [page:Matrix4]</h3>
+		<h3>.identity() [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Resets this matrix to identity.
 		Resets this matrix to identity.
 		</div>
 		</div>
 
 
-		<h3>.copy( [page:Matrix4 m] ) [page:Matrix4]</h3>
+		<h3>.copy( [page:Matrix4 m] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Copies a matrix *m* into this matrix.
 		Copies a matrix *m* into this matrix.
 		</div>
 		</div>
 
 
-		<h3>.copyPosition( [page:Matrix4 m] ) [page:Matrix4]</h3>
+		<h3>.copyPosition( [page:Matrix4 m] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Copies the translation component of the supplied matrix *m* into this matrix translation component.
 		Copies the translation component of the supplied matrix *m* into this matrix translation component.
 		</div>
 		</div>
 
 
-		<h3>.extractRotation( [page:Matrix4 m] ) [page:Matrix4]</h3>
+		<h3>.extractRotation( [page:Matrix4 m] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Extracts the rotation of the supplied matrix *m* into this matrix rotation component.
 		Extracts the rotation of the supplied matrix *m* into this matrix rotation component.
 		</div>
 		</div>
 
 
-		<h3>.lookAt( [page:Vector3 eye], [page:Vector3 center], [page:Vector3 up], ) [page:Matrix4]</h3>
+		<h3>.lookAt( [page:Vector3 eye], [page:Vector3 center], [page:Vector3 up], ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Constructs a rotation matrix, looking from *eye* towards *center* with defined *up* vector.
 		Constructs a rotation matrix, looking from *eye* towards *center* with defined *up* vector.
 		</div>
 		</div>
 
 
-		<h3>.multiply( [page:Matrix4 m] ) [page:Matrix4]</h3>
+		<h3>.multiply( [page:Matrix4 m] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Multiplies this matrix by *m*.
 		Multiplies this matrix by *m*.
 		</div>
 		</div>
 
 
-		<h3>.multiplyMatrices( [page:Matrix4 a], [page:Matrix4 b] ) [page:Matrix4]</h3>
+		<h3>.multiplyMatrices( [page:Matrix4 a], [page:Matrix4 b] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets this matrix to *a x b*.
 		Sets this matrix to *a x b*.
 		</div>
 		</div>
 
 
-		<h3>.multiplyToArray( [page:Matrix4 a], [page:Matrix4 b], [page:Array r] ) [page:Matrix4]</h3>
+		<h3>.multiplyToArray( [page:Matrix4 a], [page:Matrix4 b], [page:Array r] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets this matrix to *a x b* and stores the result into the flat array *r*.<br />
 		Sets this matrix to *a x b* and stores the result into the flat array *r*.<br />
 		*r* can be either a regular Array or a TypedArray.
 		*r* can be either a regular Array or a TypedArray.
 		</div>
 		</div>
 
 
-		<h3>.multiplyScalar( [page:Float s] ) [page:Matrix4]</h3>
+		<h3>.multiplyScalar( [page:Float s] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Multiplies this matrix by *s*.
 		Multiplies this matrix by *s*.
 		</div>
 		</div>
@@ -108,7 +108,7 @@
 		Based on [link:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm]
 		Based on [link:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm]
 		</div>
 		</div>
 
 
-		<h3>.transpose() [page:Matrix4]</h3>
+		<h3>.transpose() [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Transposes this matrix.
 		Transposes this matrix.
 		</div>
 		</div>
@@ -123,18 +123,18 @@
 		Flattens this matrix into supplied *flat* array starting from *offset* position in the array.
 		Flattens this matrix into supplied *flat* array starting from *offset* position in the array.
 		</div>
 		</div>
 
 
-		<h3>.setPosition( [page:Vector3 v] ) [page:Matrix4]</h3>
+		<h3>.setPosition( [page:Vector3 v] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets the position component for this matrix from vector *v*.
 		Sets the position component for this matrix from vector *v*.
 		</div>
 		</div>
 
 
-		<h3>.getInverse( [page:Matrix4 m] ) [page:Matrix4]</h3>
+		<h3>.getInverse( [page:Matrix4 m] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets this matrix to the inverse of matrix *m*.<br />
 		Sets this matrix to the inverse of matrix *m*.<br />
 		Based on [link:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm].
 		Based on [link:http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm].
 		</div>
 		</div>
 
 
-		<h3>.makeRotationFromEuler( [page:Vector3 v], [page:String order] ) [page:Matrix4]</h3>
+		<h3>.makeRotationFromEuler( [page:Vector3 v], [page:String order] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		v — Rotation vector.
 		v — Rotation vector.
 		order — The order of rotations. Eg. "XYZ".
 		order — The order of rotations. Eg. "XYZ".
@@ -144,17 +144,17 @@
 		Default order is *"XYZ"*.
 		Default order is *"XYZ"*.
 		</div>
 		</div>
 
 
-		<h3>.makeRotationFromQuaternion( [page:Quaternion q] ) [page:Matrix4]</h3>
+		<h3>.makeRotationFromQuaternion( [page:Quaternion q] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets the rotation submatrix of this matrix to the rotation specified by *q*. The rest of the matrix is identity.
 		Sets the rotation submatrix of this matrix to the rotation specified by *q*. The rest of the matrix is identity.
 		</div>
 		</div>
 
 
-		<h3>.scale( [page:Vector3 v] ) [page:Matrix4]</h3>
+		<h3>.scale( [page:Vector3 v] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Multiplies the columns of this matrix by vector *v*.
 		Multiplies the columns of this matrix by vector *v*.
 		</div>
 		</div>
 
 
-		<h3>.compose( [page:Vector3 translation], [page:Quaternion quaternion], [page:Vector3 scale] ) [page:Matrix4]</h3>
+		<h3>.compose( [page:Vector3 translation], [page:Quaternion quaternion], [page:Vector3 scale] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets this matrix to the transformation composed of *translation*, *quaternion* and *scale*.
 		Sets this matrix to the transformation composed of *translation*, *quaternion* and *scale*.
 		</div>
 		</div>
@@ -165,12 +165,12 @@
 		If parameters are not passed, new instances will be created.
 		If parameters are not passed, new instances will be created.
 		</div>
 		</div>
 
 
-		<h3>.makeTranslation( [page:Float x], [page:Float y], [page:Float z] ) [page:Matrix4]</h3>
+		<h3>.makeTranslation( [page:Float x], [page:Float y], [page:Float z] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets this matrix as translation transform.
 		Sets this matrix as translation transform.
 		</div>
 		</div>
 
 
-		<h3>.makeRotationX( [page:Float theta] ) [page:Matrix4]</h3>
+		<h3>.makeRotationX( [page:Float theta] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		theta — Rotation angle in radians.
 		theta — Rotation angle in radians.
 		</div>
 		</div>
@@ -178,7 +178,7 @@
 		Sets this matrix as rotation transform around x axis by *theta* radians.
 		Sets this matrix as rotation transform around x axis by *theta* radians.
 		</div>
 		</div>
 
 
-		<h3>.makeRotationY( [page:Float theta] ) [page:Matrix4]</h3>
+		<h3>.makeRotationY( [page:Float theta] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		theta — Rotation angle in radians.
 		theta — Rotation angle in radians.
 		</div>
 		</div>
@@ -186,7 +186,7 @@
 		Sets this matrix as rotation transform around y axis by *theta* radians.
 		Sets this matrix as rotation transform around y axis by *theta* radians.
 		</div>
 		</div>
 
 
-		<h3>.makeRotationZ( [page:Float theta] ) [page:Matrix4]</h3>
+		<h3>.makeRotationZ( [page:Float theta] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		theta — Rotation angle in radians.
 		theta — Rotation angle in radians.
 		</div>
 		</div>
@@ -194,7 +194,7 @@
 		Sets this matrix as rotation transform around z axis by *theta* radians.
 		Sets this matrix as rotation transform around z axis by *theta* radians.
 		</div>
 		</div>
 
 
-		<h3>.makeRotationAxis( [page:Vector3 axis], [page:Float theta] ) [page:Matrix4]</h3>
+		<h3>.makeRotationAxis( [page:Vector3 axis], [page:Float theta] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		axis — Rotation axis, should be normalized.
 		axis — Rotation axis, should be normalized.
 		theta — Rotation angle in radians.
 		theta — Rotation angle in radians.
@@ -204,22 +204,22 @@
 		Based on [link:http://www.gamedev.net/reference/articles/article1199.asp].
 		Based on [link:http://www.gamedev.net/reference/articles/article1199.asp].
 		</div>
 		</div>
 
 
-		<h3>.makeScale( [page:Float x], [page:Float y], [page:Float z] ) [page:Matrix4]</h3>
+		<h3>.makeScale( [page:Float x], [page:Float y], [page:Float z] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Sets this matrix as scale transform.
 		Sets this matrix as scale transform.
 		</div>
 		</div>
 
 
-		<h3>.makeFrustum( [page:Float left], [page:Float right], [page:Float bottom], [page:Float top], [page:Float near], [page:Float far] ) [page:Matrix4]</h3>
+		<h3>.makeFrustum( [page:Float left], [page:Float right], [page:Float bottom], [page:Float top], [page:Float near], [page:Float far] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Creates a [page:Frustum frustum] matrix.
 		Creates a [page:Frustum frustum] matrix.
 		</div>
 		</div>
 
 
-		<h3>.makePerspective( [page:Float fov], [page:Float aspect], [page:Float near], [page:Float far] ) [page:Matrix4]</h3>
+		<h3>.makePerspective( [page:Float fov], [page:Float aspect], [page:Float near], [page:Float far] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Creates a perspective projection matrix.
 		Creates a perspective projection matrix.
 		</div>
 		</div>
 
 
-		<h3>.makeOrthographic( [page:Float left], [page:Float right], [page:Float bottom], [page:Float top], [page:Float near], [page:Float far] ) [page:Matrix4]</h3>
+		<h3>.makeOrthographic( [page:Float left], [page:Float right], [page:Float bottom], [page:Float top], [page:Float near], [page:Float far] ) [page:Matrix4 this]</h3>
 		<div>
 		<div>
 		Creates an orthographic projection matrix.
 		Creates an orthographic projection matrix.
 		</div>
 		</div>
@@ -229,17 +229,17 @@
 		Clones this matrix.
 		Clones this matrix.
 		</div>
 		</div>
 
 
-		<h3>.multiplyVector3Array([page:todo a]) [page:todo]</h3>
+		<h3>.multiplyVector3Array([page:Array a]) [page:Array]</h3>
 		<div>
 		<div>
-		a -- todo
+		array -- An array in the form [vector1x, vector1y, vector1z, vector2x, vector2y, vector2z, ...]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Multiply (apply) this matrix against every vector3 in the array.
 		</div>
 		</div>
 
 
-		<h3>.getMaxScaleOnAxis() [page:todo]</h3>
+		<h3>.getMaxScaleOnAxis() [page:Float]</h3>
 		<div>
 		<div>
-		todo
+		Gets the max scale value of the 3 axes.
 		</div>
 		</div>
 
 
 		<h2>Source</h2>
 		<h2>Source</h2>

+ 38 - 38
docs/api/math/Vector2.html

@@ -42,48 +42,48 @@
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
-		<h3>.set( [page:Float x], [page:Float y] ) [page:Vector2]</h3>
+		<h3>.set( [page:Float x], [page:Float y] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Sets value of this vector.
 		Sets value of this vector.
 		</div>
 		</div>
 
 
-		<h3>.copy( [page:Vector2 v] ) [page:Vector2]</h3>
+		<h3>.copy( [page:Vector2 v] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Copies value of *v* to this vector.
 		Copies value of *v* to this vector.
 		</div>
 		</div>
 
 
-		<h3>.add( [page:Vector2 v] ) [page:Vector2]</h3>
+		<h3>.add( [page:Vector2 v] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Adds *v* to this vector.
 		Adds *v* to this vector.
 		</div>
 		</div>
 
 
-		<h3>.addVectors( [page:Vector2 a], [page:Vector2 b] ) [page:Vector2]</h3>
+		<h3>.addVectors( [page:Vector2 a], [page:Vector2 b] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Sets this vector to *a + b*.
 		Sets this vector to *a + b*.
 		</div>
 		</div>
 
 
-		<h3>.sub( [page:Vector2 v] ) [page:Vector2]</h3>
+		<h3>.sub( [page:Vector2 v] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Subtracts *v* from this vector.
 		Subtracts *v* from this vector.
 		</div>
 		</div>
 
 
-		<h3>.subVectors( [page:Vector2 a], [page:Vector2 b] ) [page:Vector2]</h3>
+		<h3>.subVectors( [page:Vector2 a], [page:Vector2 b] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Sets this vector to *a - b*.
 		Sets this vector to *a - b*.
 		</div>
 		</div>
 
 
-		<h3>.multiplyScalar( [page:Float s] ) [page:Vector2]</h3>
+		<h3>.multiplyScalar( [page:Float s] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Multiplies this vector by scalar *s*.
 		Multiplies this vector by scalar *s*.
 		</div>
 		</div>
 
 
-		<h3>.divideScalar( [page:Float s] ) [page:Vector2]</h3>
+		<h3>.divideScalar( [page:Float s] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Divides this vector by scalar *s*.<br />
 		Divides this vector by scalar *s*.<br />
 		Set vector to *( 0, 0 )* if *s == 0*.
 		Set vector to *( 0, 0 )* if *s == 0*.
 		</div>
 		</div>
 
 
-		<h3>.negate() [page:Vector2]</h3>
+		<h3>.negate() [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Inverts this vector.
 		Inverts this vector.
 		</div>
 		</div>
@@ -103,7 +103,7 @@
 		Computes length of this vector.
 		Computes length of this vector.
 		</div>
 		</div>
 
 
-		<h3>.normalize() [page:Vector2]</h3>
+		<h3>.normalize() [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Normalizes this vector.
 		Normalizes this vector.
 		</div>
 		</div>
@@ -118,7 +118,7 @@
 		Computes squared distance of this vector to *v*.
 		Computes squared distance of this vector to *v*.
 		</div>
 		</div>
 
 
-		<h3>.setLength( [page:Float l] ) [page:Vector2]</h3>
+		<h3>.setLength( [page:Float l] ) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		Normalizes this vector and multiplies it by *l*.
 		Normalizes this vector and multiplies it by *l*.
 		</div>
 		</div>
@@ -134,7 +134,7 @@
 		</div>
 		</div>
 
 
 
 
-		<h3>.clamp([page:todo min], [page:todo max]) [page:this]</h3>
+		<h3>.clamp([page:Vector2 min], [page:Vector2 max]) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		min -- [page:Vector2] containing the min x and y values in the desired range <br />
 		min -- [page:Vector2] containing the min x and y values in the desired range <br />
 		max -- [page:Vector2] containing the max x and y values in the desired range
 		max -- [page:Vector2] containing the max x and y values in the desired range
@@ -143,12 +143,7 @@
 		If this vector's x or y value is greater than the max vector's x or y value, it is replaced by the corresponding value. <br />  If this vector's x or y value is less than the min vector's x or y value, it is replace by the corresponding value.
 		If this vector's x or y value is greater than the max vector's x or y value, it is replaced by the corresponding value. <br />  If this vector's x or y value is less than the min vector's x or y value, it is replace by the corresponding value.
 		</div>
 		</div>
 
 
-		<h3>.toArray() [page:Array]</h3>
-		<div>
-		Returns an array [x, y].
-		</div>
-
-		<h3>.lerp([page:todo v], [page:todo alpha]) [page:this]</h3>
+		<h3>.lerp([page:Vector2 v], [page:Float alpha]) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		v -- [page:Vector2] <br />
 		v -- [page:Vector2] <br />
 		alpha -- [page:Float] between 0 and 1;
 		alpha -- [page:Float] between 0 and 1;
@@ -157,33 +152,25 @@
 		Linear interpolation between this vector and v, where alpha is the percent along the line.
 		Linear interpolation between this vector and v, where alpha is the percent along the line.
 		</div>
 		</div>
 
 
-		<h3>.setComponent([page:todo index], [page:todo value]) [page:undefined]</h3>
+		<h3>.setComponent([page:Integer index], [page:Float value]) [page:undefined]</h3>
 		<div>
 		<div>
 		index -- 0 or 1 <br />
 		index -- 0 or 1 <br />
-		value -- [page:todo Float]
+		value -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		if index equals 0 method replaces this.x with value. <br />
 		if index equals 0 method replaces this.x with value. <br />
 		if index equals 1 method replaces this.y with value.
 		if index equals 1 method replaces this.y with value.
 		</div>
 		</div>
 
 
-		<h3>.min([page:todo v]) [page:this]</h3>
-		<div>
-		v -- [page:Vector2]
-		</div>
-		<div>
-		If this vector's x or y value is less than v's x or y value, replace that value with the corresponding min value.
-		</div>
-
-		<h3>.addScalar([page:todo s]) [page:this]</h3>
+		<h3>.addScalar([page:Float s]) [page:Vector2 this]</h3>
 		<div>
 		<div>
-		s -- [page:todo Float]
+		s -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		Add the scalar value s to this vector's x and y values.
 		Add the scalar value s to this vector's x and y values.
 		</div>
 		</div>
 
 
-		<h3>.getComponent([page:todo index]) [page:todo Float]</h3>
+		<h3>.getComponent([page:Integer index]) [page:Float]</h3>
 		<div>
 		<div>
 		index -- 0 or 1
 		index -- 0 or 1
 		</div>
 		</div>
@@ -192,15 +179,28 @@
 		if index equals 1 returns the y value.
 		if index equals 1 returns the y value.
 		</div>
 		</div>
 
 
-		<h3>.fromArray([page:todo array]) [page:todo this]</h3>
+		<h3>.fromArray([page:Array array]) [page:Vector2 this]</h3>
 		<div>
 		<div>
-		array -- [page:todo Array] of length 2
+		array -- [page:Array] of length 2
 		</div>
 		</div>
 		<div>
 		<div>
 		Sets this vector's x value to be array[0] and y value to be array[1].
 		Sets this vector's x value to be array[0] and y value to be array[1].
 		</div>
 		</div>
 
 
-		<h3>.max([page:todo v]) [page:todo this]</h3>
+		<h3>.toArray() [page:Array]</h3>
+		<div>
+		Returns an array [x, y].
+		</div>
+
+		<h3>.min([page:Vector2 v]) [page:Vector2 this]</h3>
+		<div>
+		v -- [page:Vector2]
+		</div>
+		<div>
+		If this vector's x or y value is less than v's x or y value, replace that value with the corresponding min value.
+		</div>
+
+		<h3>.max([page:Vector2 v]) [page:Vector2 this]</h3>
 		<div>
 		<div>
 		v -- [page:Vector2]
 		v -- [page:Vector2]
 		</div>
 		</div>
@@ -208,17 +208,17 @@
 		If this vector's x or y value is greater than v's x or y value, replace that value with the corresponding max value.
 		If this vector's x or y value is greater than v's x or y value, replace that value with the corresponding max value.
 		</div>
 		</div>
 
 
-		<h3>.setX([page:todo x]) [page:todo this]</h3>
+		<h3>.setX([page:Float x]) [page:Vector2 this]</h3>
 		<div>
 		<div>
-		x -- [page:todo Float]
+		x -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		replace this vector's x value with x.
 		replace this vector's x value with x.
 		</div>
 		</div>
 
 
-		<h3>.setY([page:todo y]) [page:todo this]</h3>
+		<h3>.setY([page:Float y]) [page:Vector2 this]</h3>
 		<div>
 		<div>
-		y -- [page:todo Float]
+		y -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		replace this vector's y value with y.
 		replace this vector's y value with y.

+ 83 - 81
docs/api/math/Vector3.html

@@ -47,63 +47,63 @@
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
-		<h3>.set( [page:Float x], [page:Float y], [page:Float z] ) [page:this]</h3>
+		<h3>.set( [page:Float x], [page:Float y], [page:Float z] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets value of this vector.
 		Sets value of this vector.
 		</div>
 		</div>
 
 
-		<h3>.setX( [page:Float x] ) [page:this]</h3>
+		<h3>.setX( [page:Float x] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets x value of this vector.
 		Sets x value of this vector.
 		</div>
 		</div>
 
 
-		<h3>.setY( [page:Float y] ) [page:this]</h3>
+		<h3>.setY( [page:Float y] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets y value of this vector.
 		Sets y value of this vector.
 		</div>
 		</div>
 
 
-		<h3>.setZ( [page:Float z] ) [page:this]</h3>
+		<h3>.setZ( [page:Float z] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets z value of this vector.
 		Sets z value of this vector.
 		</div>
 		</div>
 
 
-		<h3>.copy( [page:Vector3 v] ) [page:this]</h3>
+		<h3>.copy( [page:Vector3 v] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Copies value of *v* to this vector.
 		Copies value of *v* to this vector.
 		</div>
 		</div>
 
 
-		<h3>.add( [page:Vector3 v] ) [page:this]</h3>
+		<h3>.add( [page:Vector3 v] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Adds *v* to this vector.
 		Adds *v* to this vector.
 		</div>
 		</div>
 
 
-		<h3>.addVectors( [page:Vector3 a], [page:Vector3 b] ) [page:this]</h3>
+		<h3>.addVectors( [page:Vector3 a], [page:Vector3 b] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets this vector to *a + b*.
 		Sets this vector to *a + b*.
 		</div>
 		</div>
 
 
-		<h3>.sub( [page:Vector3 v] ) [page:this]</h3>
+		<h3>.sub( [page:Vector3 v] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Subtracts *v* from this vector.
 		Subtracts *v* from this vector.
 		</div>
 		</div>
 
 
-		<h3>.subVectors( [page:Vector3 a], [page:Vector3 b] ) [page:this]</h3>
+		<h3>.subVectors( [page:Vector3 a], [page:Vector3 b] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets this vector to *a - b*.
 		Sets this vector to *a - b*.
 		</div>
 		</div>
 
 
-		<h3>.multiplyScalar( [page:Float s] ) [page:this]</h3>
+		<h3>.multiplyScalar( [page:Float s] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Multiplies this vector by scalar *s*.
 		Multiplies this vector by scalar *s*.
 		</div>
 		</div>
 
 
-		<h3>.divideScalar( [page:Float s] ) [page:this]</h3>
+		<h3>.divideScalar( [page:Float s] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Divides this vector by scalar *s*.<br />
 		Divides this vector by scalar *s*.<br />
 		Set vector to *( 0, 0, 0 )* if *s == 0*.
 		Set vector to *( 0, 0, 0 )* if *s == 0*.
 		</div>
 		</div>
 
 
-		<h3>.negate() [page:this]</h3>
+		<h3>.negate() [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Inverts this vector.
 		Inverts this vector.
 		</div>
 		</div>
@@ -129,7 +129,7 @@
 		[link:http://en.wikipedia.org/wiki/Taxicab_geometry]
 		[link:http://en.wikipedia.org/wiki/Taxicab_geometry]
 		</div>
 		</div>
 
 
-		<h3>.normalize() [page:this]</h3>
+		<h3>.normalize() [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Normalizes this vector. Transforms this Vector into a Unit vector by dividing the vector by it's length.
 		Normalizes this vector. Transforms this Vector into a Unit vector by dividing the vector by it's length.
 		</div>
 		</div>
@@ -144,27 +144,27 @@
 		Computes squared distance of this vector to *v*.
 		Computes squared distance of this vector to *v*.
 		</div>
 		</div>
 
 
-		<h3>.setLength( [page:Float l] ) [page:this]</h3>
+		<h3>.setLength( [page:Float l] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Normalizes this vector and multiplies it by *l*.
 		Normalizes this vector and multiplies it by *l*.
 		</div>
 		</div>
 
 
-		<h3>.cross( [page:Vector3 v] ) [page:this]</h3>
+		<h3>.cross( [page:Vector3 v] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets this vector to cross product of itself and *v*.
 		Sets this vector to cross product of itself and *v*.
 		</div>
 		</div>
 
 
-		<h3>.crossVectors( [page:Vector3 a], [page:Vector3 b] ) [page:this]</h3>
+		<h3>.crossVectors( [page:Vector3 a], [page:Vector3 b] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets this vector to cross product of *a* and *b*.
 		Sets this vector to cross product of *a* and *b*.
 		</div>
 		</div>
 
 
-		<h3>.getPositionFromMatrix( [page:Matrix4 m] ) [page:this]</h3>
+		<h3>.getPositionFromMatrix( [page:Matrix4 m] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets this vector extracting position from matrix transform.
 		Sets this vector extracting position from matrix transform.
 		</div>
 		</div>
 
 
-		<h3>.getScaleFromMatrix( [page:Matrix4 m] ) [page:this]</h3>
+		<h3>.getScaleFromMatrix( [page:Matrix4 m] ) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		Sets this vector extracting scale from matrix transform.
 		Sets this vector extracting scale from matrix transform.
 		</div>
 		</div>
@@ -180,16 +180,17 @@
 		</div>
 		</div>
 
 
 
 
-		<h3>.clamp([page:todo min], [page:todo max]) [page:this]</h3>
+		<h3>.clamp([page:Vector3 min], [page:Vector3 max]) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		min -- [page:Vector3] <br />
 		min -- [page:Vector3] <br />
 		max -- [page:Vector3]
 		max -- [page:Vector3]
 		</div>
 		</div>
 		<div>
 		<div>
-		If this vector's x, y or z value is greater than the max vector's x, y or z value, it is replaced by the corresponding value. <br />  If this vector's x, y or z value is less than the min vector's x, y or z value, it is replace by the corresponding value.
+		If this vector's x, y or z value is greater than the max vector's x, y or z value, it is replaced by the corresponding value. <br /><br />
+		If this vector's x, y or z value is less than the min vector's x, y or z value, it is replace by the corresponding value.
 		</div>
 		</div>
 
 
-		<h3>.applyMatrix3([page:todo m]) [page:this]</h3>
+		<h3>.applyMatrix3([page:Matrix3 m]) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		m -- [page:Matrix3]
 		m -- [page:Matrix3]
 		</div>
 		</div>
@@ -197,58 +198,66 @@
 		Multiplies this vector times a 3 x 3 matrix.
 		Multiplies this vector times a 3 x 3 matrix.
 		</div>
 		</div>
 
 
-		<h3>.applyMatrix4([page:todo m]) [page:todo this]</h3>
+		<h3>.applyMatrix4([page:Matrix3 m]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		m -- [page:todo Matrix4]
+		m -- [page:Matrix4]
 		</div>
 		</div>
 		<div>
 		<div>
 		Multiplies this vector by 4 x 3 subset of a Matrix4.
 		Multiplies this vector by 4 x 3 subset of a Matrix4.
 		</div>
 		</div>
 
 
-		<h3>.projectOnPlane([page:todo planeNormal]) [page:todo this]</h3>
+		<h3>.projectOnPlane([page:Vector3 planeNormal]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		planeNormal -- [page:todo Plane.normal]
+		planeNormal -- [page:Vector3 planeNormal] A vector representing a plane normal.
 		</div>
 		</div>
 		<div>
 		<div>
 		Projects this vector onto a plane by subtracting this vector projected onto the plane's normal from this vector.
 		Projects this vector onto a plane by subtracting this vector projected onto the plane's normal from this vector.
 		</div>
 		</div>
 
 
-		<h3>.projectOnVector([page:todo vector]) [page:todo this]</h3>
+		<h3>.projectOnVector([page:Vector3]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		vector -- [page:todo Vector3]
+		vector -- [page:Vector3]
 		</div>
 		</div>
 		<div>
 		<div>
 		Projects this vector onto another vector.
 		Projects this vector onto another vector.
 		</div>
 		</div>
 
 
-		<h3>.addScalar([page:todo s]) [page:todo this]</h3>
+		<h3>.addScalar([page:Float]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		s -- [page:todo Float]
+		s -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		Adds a s to this vector.
 		Adds a s to this vector.
 		</div>
 		</div>
 
 
-		<h3>.divide([page:todo v]) [page:todo this]</h3>
+		<h3>.divide([page:Vector3 v]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		v -- [page:todo Vector3]
+		v -- [page:Vector3]
 		</div>
 		</div>
 		<div>
 		<div>
 		Divides this vector by vector v.
 		Divides this vector by vector v.
 		</div>
 		</div>
 
 
-		<h3>.min([page:todo v]) [page:todo]</h3>
+		<h3>.min([page:Vector3 v]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		v -- [page:todo Vector3]
+		v -- [page:Vector3]
 		</div>
 		</div>
 		<div>
 		<div>
 		If this vector's x, y, or z value is less than vector v's x, y, or z value, that value is replaced by the corresponding vector v value.
 		If this vector's x, y, or z value is less than vector v's x, y, or z value, that value is replaced by the corresponding vector v value.
 		</div>
 		</div>
 
 
-		<h3>.setComponent([page:todo index], [page:todo value]) [page:todo this]</h3>
+		<h3>.max([page:Vector3 v]) [page:Vector3 this]</h3>
+		<div>
+		v -- [page:Vector3]
+		</div>
+		<div>
+		If this vector's x, y, or z value is greater than vector v's x, y, or z value, that value is replaced by the corresponding vector v value.
+		</div>
+
+		<h3>.setComponent([page:Integer index], [page:Float value]) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		index -- 0, 1, or 2 <br />
 		index -- 0, 1, or 2 <br />
-		value -- [page:todo Float]
+		value -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		If index equals 0 the method sets this vector's x value to value <br />
 		If index equals 0 the method sets this vector's x value to value <br />
@@ -256,111 +265,104 @@
 		If index equals 2 the method sets this vector's z value to value
 		If index equals 2 the method sets this vector's z value to value
 		</div>
 		</div>
 
 
-		<h3>.transformDirection([page:todo m]) [page:todo this]</h3>
+		<h3>.transformDirection([page:Matrix4 m]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		m -- [page:todo Matrix4]
+		m -- [page:Matrix4]
 		</div>
 		</div>
 		<div>
 		<div>
-		Multiplies this vector by a 3 x 3 subset of a Matrix4 and then normalizes the results.
+		Transforms the direction of this vector by a matrix (a 3 x 3 subset of a Matrix4) and then normalizes the result.
 		</div>
 		</div>
 
 
-		<h3>.multiplyVectors([page:todo a], [page:todo b]) [page:todo this]</h3>
+		<h3>.multiplyVectors([page:Vector3 a], [page:Vector3 b]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		a -- [page:todo Vector3] <br />
-		b -- [page:todo Vector3]
+		a -- [page:Vector3] <br />
+		b -- [page:Vector3]
 		</div>
 		</div>
 		<div>
 		<div>
-		Sets this vector equal the result of multiplying vector a by vector b.
+		Sets this vector equal to the result of multiplying vector a by vector b.
 		</div>
 		</div>
 
 
-		<h3>.getComponent([page:todo index]) [page:todo Float]</h3>
+		<h3>.getComponent([page:Integer index]) [page:Float]</h3>
 		<div>
 		<div>
-		index -- 0, 1, or 2
+		index -- [page:Integer] 0, 1, or 2
 		</div>
 		</div>
 		<div>
 		<div>
-		If index equals 0 the method returns this vector's x value <br />
-		If index equals 1 the method returns this vector's y value <br />
-		If index equals 2 the method returns this vector's z value
+		
+		Returns the value of the vector component x, y, or z by an index. <br /><br />
+		
+		Index 0: x <br />
+		Index 1: y <br />
+		Index 2: z <br />
 		</div>
 		</div>
 
 
-		<h3>.applyAxisAngle([page:todo axis], [page:todo angle]) [page:todo this]</h3>
+		<h3>.applyAxisAngle([page:Vector3 axis], [page:Float angle]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		axis -- a normalized [page:todo Vector3] <br />
-		angle -- an angle in radians
+		axis -- A normalized [page:Vector3] <br />
+		angle -- An angle in radians
 		</div>
 		</div>
 		<div>
 		<div>
 		Applies a rotation specified by an axis and an angle to this vector.
 		Applies a rotation specified by an axis and an angle to this vector.
 		</div>
 		</div>
 
 
-		<h3>.lerp([page:todo v], [page:todo alpha]) [page:todo this]</h3>
+		<h3>.lerp([page:Vector3 v], [page:Float alpha]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		v -- [page:todo Vector3] <br />
-		alpha -- [page:todo Float] between 0 and 1.
+		v -- [page:Vector3] <br />
+		alpha -- [page:Float] between 0 and 1.
 		</div>
 		</div>
 		<div>
 		<div>
 		Linear Interpolation between this vector and vector v, where alpha is the percent along the line.
 		Linear Interpolation between this vector and vector v, where alpha is the percent along the line.
 		</div>
 		</div>
 
 
-		<h3>.max([page:todo v]) [page:todo this]</h3>
-		<div>
-		v -- [page:todo Vector3]
-		</div>
-		<div>
-		If this vector's x, y, or z value is greater than vector v's x, y, or z value, that value is replaced by the corresponding vector v value.
-		</div>
-
-		<h3>.angleTo([page:todo v]) [page:todo Float]</h3>
+		<h3>.angleTo([page:Vector3 v]) [page:Float]</h3>
 		<div>
 		<div>
-		v -- [page:todo Vector3]
+		v -- [page:Vector3]
 		</div>
 		</div>
 		<div>
 		<div>
 		Returns the angle between this vector and vector v in radians.
 		Returns the angle between this vector and vector v in radians.
 		</div>
 		</div>
 
 
-		<h3>.getColumnFromMatrix([page:todo index], [page:todo matrix]) [page:todo this]</h3>
+		<h3>.getColumnFromMatrix([page:Integer index], [page:Matrix4 matrix]) [page:Vector3 this]</h3>
 		<div>
 		<div>
 		index -- 0, 1, 2, or 3 <br />
 		index -- 0, 1, 2, or 3 <br />
-		matrix -- [page:todo Matrix4]
+		matrix -- [page:Matrix4]
 		</div>
 		</div>
 		<div>
 		<div>
 		Sets this vector's x, y, and z equal to the column of the matrix specified by the index.
 		Sets this vector's x, y, and z equal to the column of the matrix specified by the index.
 		</div>
 		</div>
 
 
-		<h3>.reflect([page:todo vector]) [page:todo this]</h3>
+		<h3>.reflect([page:Vector3 vector]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		vector -- [page:todo Vector3] the vector to reflect about
+		vector -- [page:Vector3] the vector to reflect about
 		</div>
 		</div>
 		<div>
 		<div>
 		Reflects this vector about a vector.
 		Reflects this vector about a vector.
 		</div>
 		</div>
 
 
-		<h3>.fromArray([page:todo array]) [page:todo this]</h3>
+		<h3>.fromArray([page:Array array]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		array -- [page:todo Array]
+		array -- [page:Array] [x, y, z]
 		</div>
 		</div>
 		<div>
 		<div>
-		Assigns this vectors x value to array[0]. <br />
-		Assigns this vectors y value to array[1]. <br />
-		Assigns this vectors z value to array[2]. <br />
+		Sets the vector's components based on an array formatted like [x, y, z]
 		</div>
 		</div>
 
 
-		<h3>.multiply([page:todo v]) [page:todo this]</h3>
+		<h3>.multiply([page:Vector3 v]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		v -- [page:todo Vector3] <br />
+		v -- [page:Vector3] <br />
 		</div>
 		</div>
 		<div>
 		<div>
 		Multipies this vector by vector v.
 		Multipies this vector by vector v.
 		</div>
 		</div>
 
 
-		<h3>.applyProjection([page:todo m]) [page:todo ths]</h3>
+		<h3>.applyProjection([page:Matrix4 m]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		m -- [page:todo Matrix4] projection matrix.
+		m -- [page:Matrix4] projection matrix.
 		</div>
 		</div>
 		<div>
 		<div>
 		Multiplies this vector and m, and divides by perspective.
 		Multiplies this vector and m, and divides by perspective.
 		</div>
 		</div>
 
 
-		<h3>.toArray() [page:todo Array]</h3>
+		<h3>.toArray() [page:Array]</h3>
 		<div>
 		<div>
 		Assigns this vector's x value to array[0]. <br />
 		Assigns this vector's x value to array[0]. <br />
 		Assigns this vector's y value to array[1]. <br />
 		Assigns this vector's y value to array[1]. <br />
@@ -368,17 +370,17 @@
 		Returns the created array.
 		Returns the created array.
 		</div>
 		</div>
 
 
-		<h3>.applyEuler( [page:todo euler] ) [page:todo this]</h3>
+		<h3>.applyEuler([page:Euler euler]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		euler -- [page:todo Euler]
+		euler -- [page:Euler]
 		</div>
 		</div>
 		<div>
 		<div>
 		Applies euler transform to this vector by converting the [page:Euler] obect to a [page:Quaternion] and applying.
 		Applies euler transform to this vector by converting the [page:Euler] obect to a [page:Quaternion] and applying.
 		</div>
 		</div>
 
 
-		<h3>.applyQuaternion([page:todo q]) [page:todo this]</h3>
+		<h3>.applyQuaternion([page:Quaternion quaternion]) [page:Vector3 this]</h3>
 		<div>
 		<div>
-		q -- [page:Quaternion]
+		quaternion -- [page:Quaternion]
 		</div>
 		</div>
 		<div>
 		<div>
 		Applies a [page:Quaternion] transform to this vector.
 		Applies a [page:Quaternion] transform to this vector.

+ 83 - 72
docs/api/math/Vector4.html

@@ -17,13 +17,10 @@
 
 
 		<h3>[name]( [page:Float x], [page:Float y], [page:Float z], [page:Float w] )</h3>
 		<h3>[name]( [page:Float x], [page:Float y], [page:Float z], [page:Float w] )</h3>
 		<div>
 		<div>
-		x -- todo <br />
-		y -- todo <br />
-		z -- todo <br />
-		w -- todo
-		</div>
-		<div>
-		todo
+		x -- [page:Float] <br />
+		y -- [page:Float] <br />
+		z -- [page:Float] <br />
+		w -- [page:Float]
 		</div>
 		</div>
 
 
 
 
@@ -40,22 +37,22 @@
 
 
 		<h2>Methods</h2>
 		<h2>Methods</h2>
 
 
-		<h3>.set( [page:Float x], [page:Float y], [page:Float z], [page:Float w] ) [page:Vector4]</h3>
+		<h3>.set( [page:Float x], [page:Float y], [page:Float z], [page:Float w] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Sets value of this vector.
 		Sets value of this vector.
 		</div>
 		</div>
 
 
-		<h3>.copy( [page:Vector4 v] ) [page:Vector4]</h3>
+		<h3>.copy( [page:Vector4 v] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Copies value of *v* to this vector.
 		Copies value of *v* to this vector.
 		</div>
 		</div>
 
 
-		<h3>.add( [page:Vector4 v] ) [page:Vector4]</h3>
+		<h3>.add( [page:Vector4 v] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Adds *v* to this vector.
 		Adds *v* to this vector.
 		</div>
 		</div>
 
 
-		<h3>.addVectors( [page:Vector4 a], [page:Vector4 b] ) [page:Vector4]</h3>
+		<h3>.addVectors( [page:Vector4 a], [page:Vector4 b] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Sets this vector to *a + b*.
 		Sets this vector to *a + b*.
 		</div>
 		</div>
@@ -65,23 +62,23 @@
 		Subtracts *v* from this vector.
 		Subtracts *v* from this vector.
 		</div>
 		</div>
 
 
-		<h3>.subVectors( [page:Vector4 a], [page:Vector4 b] ) [page:Vector4]</h3>
+		<h3>.subVectors( [page:Vector4 a], [page:Vector4 b] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Sets this vector to *a - b*.
 		Sets this vector to *a - b*.
 		</div>
 		</div>
 
 
-		<h3>.multiplyScalar( [page:Float s] ) [page:Vector4]</h3>
+		<h3>.multiplyScalar( [page:Float s] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Multiplies this vector by scalar *s*.
 		Multiplies this vector by scalar *s*.
 		</div>
 		</div>
 
 
-		<h3>.divideScalar( [page:Float s] ) [page:Vector4]</h3>
+		<h3>.divideScalar( [page:Float s] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Divides this vector by scalar *s*.<br />
 		Divides this vector by scalar *s*.<br />
 		Set vector to *( 0, 0, 0 )* if *s == 0*.
 		Set vector to *( 0, 0, 0 )* if *s == 0*.
 		</div>
 		</div>
 
 
-		<h3>.negate() [page:Vector4]</h3>
+		<h3>.negate() [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Inverts this vector.
 		Inverts this vector.
 		</div>
 		</div>
@@ -101,17 +98,17 @@
 		Computes length of this vector.
 		Computes length of this vector.
 		</div>
 		</div>
 
 
-		<h3>.normalize() [page:Vector4]</h3>
+		<h3>.normalize() [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Normalizes this vector.
 		Normalizes this vector.
 		</div>
 		</div>
 
 
-		<h3>.setLength( [page:Float l] ) [page:Vector4]</h3>
+		<h3>.setLength( [page:Float l] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Normalizes this vector and multiplies it by *l*.
 		Normalizes this vector and multiplies it by *l*.
 		</div>
 		</div>
 
 
-		<h3>.lerp( [page:Vector4 v], [page:Float alpha] ) [page:Vector4]</h3>
+		<h3>.lerp( [page:Vector4 v], [page:Float alpha] ) [page:Vector4 this]</h3>
 		<div>
 		<div>
 		Linearly interpolate between this vector and *v* with *alpha* factor.
 		Linearly interpolate between this vector and *v* with *alpha* factor.
 		</div>
 		</div>
@@ -122,136 +119,150 @@
 		</div>
 		</div>
 
 
 
 
-		<h3>.clamp([page:todo min], [page:todo max]) [page:todo]</h3>
+		<h3>.clamp([page:Vector4 min], [page:Vector4 max]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		min -- todo <br />
-		max -- todo
+		min -- [page:Vector4] <br />
+		max -- [page:Vector4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
-		</div>
+		If this vector's x, y, z, or w value is greater than the max vector's x, y, z, or w value, it is replaced by the corresponding value.<br/><br/>
 
 
-		<h3>.toArray() [page:todo]</h3>
-		<div>
-		todo
+		If this vector's x, y, z, or w value is less than the min vector's x, y, z, or w value, it is replace by the corresponding value.
 		</div>
 		</div>
 
 
-		<h3>.applyMatrix4([page:todo m]) [page:todo]</h3>
+		<h3>.applyMatrix4([page:Matrix4 m]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		m -- todo
+		m -- [page:Matrix4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Transforms the vector by the matrix.
 		</div>
 		</div>
 
 
-		<h3>.min([page:todo v]) [page:todo]</h3>
+		<h3>.min([page:Vector4 v]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		v -- todo
+		v -- [page:Vector4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		If this vector's x, y, z, or w value is less than vector v's x, y, z, or w value, that value is replaced by the corresponding vector v value.
 		</div>
 		</div>
 
 
-		<h3>.max([page:todo v]) [page:todo]</h3>
+		<h3>.max([page:Vector4 v]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		v -- todo
+		v -- [page:Vector4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		If this vector's x, y, z, or w value is greater than vector v's x, y, z, or w value, that value is replaced by the corresponding vector v value. 
 		</div>
 		</div>
 
 
-		<h3>.setAxisAngleFromRotationMatrix([page:todo m]) [page:todo]</h3>
+		<h3>.addScalar([page:Float s]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		m -- todo
+		s -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Adds a scalar value to all of the vector's components.
 		</div>
 		</div>
 
 
-		<h3>.addScalar([page:todo s]) [page:todo]</h3>
+		<h3>.equals([page:Vector4 v]) [page:Boolean]</h3>
 		<div>
 		<div>
-		s -- todo
+		v -- [page:Vector4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Checks to see if this vector matches vector v.
 		</div>
 		</div>
-
-		<h3>.equals([page:todo v]) [page:todo]</h3>
+		
+		<h3>.setAxisAngleFromRotationMatrix([page:Matrix4 m]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		v -- todo
+		m -- [page:Matrix4]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Sets this Vector4 to the computed <a href='http://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation' target='_blank'>axis-angle representation</a> of the rotation defined by Matrix4 m. Assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled).<br/><br/>
+
+		The axis is stored in components (x, y, z) of the vector, and the rotation in radians is stored in component w
 		</div>
 		</div>
 
 
-		<h3>.setAxisAngleFromQuaternion([page:todo q]) [page:todo]</h3>
+		<h3>.setAxisAngleFromQuaternion([page:Quaternion q]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		q -- todo
+		q -- [page:Quaternion]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Sets this Vector4 to the computed <a href='http://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation' target='_blank'>axis-angle representation</a> of the rotation defined by Quaternion q.<br/><br/>
+
+		The axis is stored in components (x, y, z) of the vector, and the rotation in radians is stored in component w
 		</div>
 		</div>
 
 
-		<h3>.setW([page:todo w]) [page:todo]</h3>
+		<h3>.getComponent([page:Integer index]) [page:Float]</h3>
 		<div>
 		<div>
-		w -- todo
+		index -- [page:Integer] 0, 1, 2, or 3
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Returns the value of the vector component x, y, or z by an index.<br/><br/>
+
+		Index 0: x<br/>
+		Index 1: y<br/>
+		Index 2: z<br/>
+		Index 3: w<br/>
+ 
 		</div>
 		</div>
 
 
-		<h3>.getComponent([page:todo index]) [page:todo]</h3>
+		<h3>.setComponent([page:Integer index], [page:Float value])</h3>
 		<div>
 		<div>
-		index -- todo
+		index -- [page:Integer] 0 - 3 <br />
+		value -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
 		todo
 		todo
 		</div>
 		</div>
-
-		<h3>.fromArray([page:todo array]) [page:todo]</h3>
+		
+		<h3>.fromArray([page:Array array]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		array -- todo
+		array -- [page:Array] An array formatted [x, y, z, w]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Sets the vector's components based on an array formatted like [x, y, z, w]
 		</div>
 		</div>
 
 
-		<h3>.lengthManhattan() [page:todo]</h3>
+		<h3>.toArray() [page:Array]</h3>
 		<div>
 		<div>
-		todo
+		Returns an array in the format [x, y, z, w]
 		</div>
 		</div>
 
 
-		<h3>.setComponent([page:todo index], [page:todo value]) [page:todo]</h3>
+		<h3>.lengthManhattan() [page:Float]</h3>
 		<div>
 		<div>
-		index -- todo <br />
-		value -- todo
+		Computes Manhattan length of this vector.<br />
+		[link:http://en.wikipedia.org/wiki/Taxicab_geometry]
 		</div>
 		</div>
+
+
+		<h3>.setX([page:Float x]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		todo
+		x -- [page:Float]
+		</div>
+		<div>
+		Sets the x component of the vector.
 		</div>
 		</div>
 
 
-		<h3>.setX([page:todo x]) [page:todo]</h3>
+		<h3>.setY([page:Float y]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		x -- todo
+		y -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Sets the y component of the vector.
 		</div>
 		</div>
 
 
-		<h3>.setY([page:todo y]) [page:todo]</h3>
+		<h3>.setZ([page:Float z]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		y -- todo
+		z -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Sets the z component of the vector.
 		</div>
 		</div>
 
 
-		<h3>.setZ([page:todo z]) [page:todo]</h3>
+		<h3>.setW([page:Float w]) [page:Vector4 this]</h3>
 		<div>
 		<div>
-		z -- todo
+		w -- [page:Float]
 		</div>
 		</div>
 		<div>
 		<div>
-		todo
+		Sets the w component of the vector.
 		</div>
 		</div>
 
 
 		<h2>Source</h2>
 		<h2>Source</h2>

+ 100 - 222
examples/js/loaders/OBJLoader.js

@@ -45,9 +45,84 @@ THREE.OBJLoader.prototype = {
 			return new THREE.Face3( a, b, c, normals );
 			return new THREE.Face3( a, b, c, normals );
 
 
 		}
 		}
-
+		
 		var object = new THREE.Object3D();
 		var object = new THREE.Object3D();
 		var geometry, material, mesh;
 		var geometry, material, mesh;
+		var face_offset = 0;
+		
+		function add_face( a, b, c, normals_inds ) {
+
+			if ( normals_inds === undefined ) {
+
+				geometry.faces.push( face3(
+					parseInt( a ) - (face_offset + 1),
+					parseInt( b ) - (face_offset + 1),
+					parseInt( c ) - (face_offset + 1)
+				) );
+
+			} else {
+
+				geometry.faces.push( face3(
+					parseInt( a ) - (face_offset + 1),
+					parseInt( b ) - (face_offset + 1),
+					parseInt( c ) - (face_offset + 1),
+					[
+						normals[ parseInt( normals_inds[ 0 ] ) - 1 ].clone(),
+						normals[ parseInt( normals_inds[ 1 ] ) - 1 ].clone(),
+						normals[ parseInt( normals_inds[ 2 ] ) - 1 ].clone()
+					]
+				) );
+
+			}
+
+		}
+		
+		function add_uvs( a, b, c ) {
+      
+			geometry.faceVertexUvs[ 0 ].push( [
+				uvs[ parseInt( a ) - 1 ].clone(),
+				uvs[ parseInt( b ) - 1 ].clone(),
+				uvs[ parseInt( c ) - 1 ].clone()
+			] );
+
+		}
+		
+		function handle_face_line(faces, uvs, normals_inds) {
+
+			if ( faces[ 3 ] === undefined ) {
+				
+				add_face( faces[ 0 ], faces[ 1 ], faces[ 2 ], normals_inds );
+				
+				if (!(uvs === undefined) && uvs.length > 0) {
+
+					add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 2 ] );
+
+				}
+
+			} else {
+				
+				if (!(normals_inds === undefined) && normals_inds.length > 0) {
+
+					add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ], [ normals_inds[ 0 ], normals_inds[ 1 ], normals_inds[ 3 ] ]);
+					add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ], [ normals_inds[ 1 ], normals_inds[ 2 ], normals_inds[ 3 ] ]);
+
+				} else {
+
+					add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ]);
+					add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ]);
+
+				}
+				
+				if (!(uvs === undefined) && uvs.length > 0) {
+
+					add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] );
+					add_uvs( uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] );
+
+				}
+
+			}
+			
+		}
 
 
 		// create mesh if no objects in text
 		// create mesh if no objects in text
 
 
@@ -112,7 +187,7 @@ THREE.OBJLoader.prototype = {
 
 
 				// ["v 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
 				// ["v 1.0 2.0 3.0", "1.0", "2.0", "3.0"]
 
 
-				vertices.push( vector(
+				geometry.vertices.push( vector(
 					parseFloat( result[ 1 ] ),
 					parseFloat( result[ 1 ] ),
 					parseFloat( result[ 2 ] ),
 					parseFloat( result[ 2 ] ),
 					parseFloat( result[ 3 ] )
 					parseFloat( result[ 3 ] )
@@ -141,244 +216,47 @@ THREE.OBJLoader.prototype = {
 
 
 				// ["f 1 2 3", "1", "2", "3", undefined]
 				// ["f 1 2 3", "1", "2", "3", undefined]
 
 
-				 if ( result[ 4 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 1 ] ) - 1 ],
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 3 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++
-					) );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 1 ] ) - 1 ],
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 3 ] ) - 1 ],
-						vertices[ parseInt( result[ 4 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3
-					) );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3
-					) );
-
-					verticesCount += 4;
-
-				}
+				handle_face_line([ result[ 1 ], result[ 2 ], result[ 3 ], result[ 4 ] ]);
 
 
 			} else if ( ( result = face_pattern2.exec( line ) ) !== null ) {
 			} else if ( ( result = face_pattern2.exec( line ) ) !== null ) {
 
 
 				// ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined]
 				// ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined]
-
-				if ( result[ 10 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 6 ] ) - 1 ],
-						uvs[ parseInt( result[ 9 ] ) - 1 ]
-					] );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ],
-						vertices[ parseInt( result[ 11 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 6 ] ) - 1 ],
-						uvs[ parseInt( result[ 12 ] ) - 1 ]
-					] );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 6 ] ) - 1 ],
-						uvs[ parseInt( result[ 9 ] ) - 1 ],
-						uvs[ parseInt( result[ 12 ] ) - 1 ]
-					] );
-
-					verticesCount += 4;
-
-				}
+				
+				handle_face_line(
+					[ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces
+					[ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //uv
+				);
 
 
 			} else if ( ( result = face_pattern3.exec( line ) ) !== null ) {
 			} else if ( ( result = face_pattern3.exec( line ) ) !== null ) {
 
 
 				// ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined]
 				// ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined]
 
 
-				if ( result[ 13 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 6 ] ) - 1 ],
-						vertices[ parseInt( result[ 10 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++,
-						[
-							normals[ parseInt( result[ 4 ] ) - 1 ],
-							normals[ parseInt( result[ 8 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 7 ] ) - 1 ],
-						uvs[ parseInt( result[ 11 ] ) - 1 ]
-					] );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 6 ] ) - 1 ],
-						vertices[ parseInt( result[ 10 ] ) - 1 ],
-						vertices[ parseInt( result[ 14 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 4 ] ) - 1 ],
-							normals[ parseInt( result[ 8 ] ) - 1 ],
-							normals[ parseInt( result[ 16 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 7 ] ) - 1 ],
-						uvs[ parseInt( result[ 15 ] ) - 1 ]
-					] );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 8 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ],
-							normals[ parseInt( result[ 16 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 7 ] ) - 1 ],
-						uvs[ parseInt( result[ 11 ] ) - 1 ],
-						uvs[ parseInt( result[ 15 ] ) - 1 ]
-					] );
-
-					verticesCount += 4;
-
-				}
+				handle_face_line(
+					[ result[ 2 ], result[ 6 ], result[ 10 ], result[ 14 ] ], //faces
+					[ result[ 3 ], result[ 7 ], result[ 11 ], result[ 15 ] ], //uv
+					[ result[ 4 ], result[ 8 ], result[ 12 ], result[ 16 ] ] //normal
+				);
 
 
 			} else if ( ( result = face_pattern4.exec( line ) ) !== null ) {
 			} else if ( ( result = face_pattern4.exec( line ) ) !== null ) {
 
 
 				// ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined]
 				// ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined]
 
 
-				if ( result[ 10 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++,
-						[
-							normals[ parseInt( result[ 3 ] ) - 1 ],
-							normals[ parseInt( result[ 6 ] ) - 1 ],
-							normals[ parseInt( result[ 9 ] ) - 1 ]
-						]
-					) );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ],
-						vertices[ parseInt( result[ 11 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 3 ] ) - 1 ],
-							normals[ parseInt( result[ 6 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 6 ] ) - 1 ],
-							normals[ parseInt( result[ 9 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ]
-						]
-					) );
-
-					verticesCount += 4;
-
-				}
+				handle_face_line(
+					[ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces
+					[ ], //uv
+					[ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //normal
+				);
 
 
 			} else if ( /^o /.test( line ) ) {
 			} else if ( /^o /.test( line ) ) {
 
 
 				// object
 				// object
 
 
+				if (!(geometry === undefined)) {
+
+					face_offset = face_offset + geometry.vertices.length;
+
+				}
+				
 				geometry = new THREE.Geometry();
 				geometry = new THREE.Geometry();
 				material = new THREE.MeshLambertMaterial();
 				material = new THREE.MeshLambertMaterial();
 
 
@@ -423,7 +301,7 @@ THREE.OBJLoader.prototype = {
 			geometry.computeBoundingSphere();
 			geometry.computeBoundingSphere();
 
 
 		}
 		}
-
+		
 		return object;
 		return object;
 
 
 	}
 	}

+ 100 - 223
examples/js/loaders/OBJMTLLoader.js

@@ -78,9 +78,13 @@ THREE.OBJMTLLoader.prototype = {
 
 
 		}
 		}
 
 
+		var face_offset = 0;
+
 		function meshN( meshName, materialName ) {
 		function meshN( meshName, materialName ) {
 
 
-			if ( geometry.vertices.length > 0 ) {
+			if ( vertices.length > 0 ) {
+
+				geometry.vertices = vertices;
 
 
 				geometry.mergeVertices();
 				geometry.mergeVertices();
 				geometry.computeCentroids();
 				geometry.computeCentroids();
@@ -91,12 +95,12 @@ THREE.OBJMTLLoader.prototype = {
 
 
 				geometry = new THREE.Geometry();
 				geometry = new THREE.Geometry();
 				mesh = new THREE.Mesh( geometry, material );
 				mesh = new THREE.Mesh( geometry, material );
-
 				verticesCount = 0;
 				verticesCount = 0;
 
 
 			}
 			}
 
 
 			if ( meshName !== undefined ) mesh.name = meshName;
 			if ( meshName !== undefined ) mesh.name = meshName;
+
 			if ( materialName !== undefined ) {
 			if ( materialName !== undefined ) {
 
 
 				material = new THREE.MeshLambertMaterial();
 				material = new THREE.MeshLambertMaterial();
@@ -120,6 +124,79 @@ THREE.OBJMTLLoader.prototype = {
 		var normals = [];
 		var normals = [];
 		var uvs = [];
 		var uvs = [];
 
 
+		function add_face( a, b, c, normals_inds ) {
+
+			if ( normals_inds === undefined ) {
+
+				geometry.faces.push( face3(
+					parseInt( a ) - (face_offset + 1),
+					parseInt( b ) - (face_offset + 1),
+					parseInt( c ) - (face_offset + 1)
+				) );
+
+			} else {
+
+				geometry.faces.push( face3(
+					parseInt( a ) - (face_offset + 1),
+					parseInt( b ) - (face_offset + 1),
+					parseInt( c ) - (face_offset + 1),
+					[
+						normals[ parseInt( normals_inds[ 0 ] ) - 1 ].clone(),
+						normals[ parseInt( normals_inds[ 1 ] ) - 1 ].clone(),
+						normals[ parseInt( normals_inds[ 2 ] ) - 1 ].clone()
+					]
+				) );
+
+			}
+
+		}
+		
+		function add_uvs( a, b, c ) {
+
+			geometry.faceVertexUvs[ 0 ].push( [
+				uvs[ parseInt( a ) - 1 ].clone(),
+				uvs[ parseInt( b ) - 1 ].clone(),
+				uvs[ parseInt( c ) - 1 ].clone()
+			] );
+
+		}
+		
+		function handle_face_line(faces, uvs, normals_inds) {
+			
+			if ( faces[ 3 ] === undefined ) {
+				
+				add_face( faces[ 0 ], faces[ 1 ], faces[ 2 ], normals_inds );
+				
+				if (!(uvs === undefined) && uvs.length > 0) {
+					add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 2 ] );
+				}
+
+			} else {
+				
+				if (!(normals_inds === undefined) && normals_inds.length > 0) {
+
+					add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ], [ normals_inds[ 0 ], normals_inds[ 1 ], normals_inds[ 3 ] ]);
+					add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ], [ normals_inds[ 1 ], normals_inds[ 2 ], normals_inds[ 3 ] ]);
+
+				} else {
+
+					add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ]);
+					add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ]);
+
+				}
+				
+				if (!(uvs === undefined) && uvs.length > 0) {
+
+					add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] );
+					add_uvs( uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] );
+
+				}
+
+			}
+			
+		}
+
+
 		// v float float float
 		// v float float float
 
 
 		var vertex_pattern = /v( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/;
 		var vertex_pattern = /v( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/;
@@ -196,244 +273,44 @@ THREE.OBJMTLLoader.prototype = {
 
 
 				// ["f 1 2 3", "1", "2", "3", undefined]
 				// ["f 1 2 3", "1", "2", "3", undefined]
 
 
-				 if ( result[ 4 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 1 ] ) - 1 ],
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 3 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++
-					) );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 1 ] ) - 1 ],
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 3 ] ) - 1 ],
-						vertices[ parseInt( result[ 4 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3
-					) );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3
-					) );
-
-					verticesCount += 4;
-
-				}
+				handle_face_line([ result[ 1 ], result[ 2 ], result[ 3 ], result[ 4 ] ]);
 
 
 			} else if ( ( result = face_pattern2.exec( line ) ) !== null ) {
 			} else if ( ( result = face_pattern2.exec( line ) ) !== null ) {
 
 
 				// ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined]
 				// ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined]
-
-				if ( result[ 10 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 6 ] ) - 1 ],
-						uvs[ parseInt( result[ 9 ] ) - 1 ]
-					] );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ],
-						vertices[ parseInt( result[ 11 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 6 ] ) - 1 ],
-						uvs[ parseInt( result[ 12 ] ) - 1 ]
-					] );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 6 ] ) - 1 ],
-						uvs[ parseInt( result[ 9 ] ) - 1 ],
-						uvs[ parseInt( result[ 12 ] ) - 1 ]
-					] );
-
-					verticesCount += 4;
-
-				}
+				
+				handle_face_line(
+					[ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces
+					[ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //uv
+				);
 
 
 			} else if ( ( result = face_pattern3.exec( line ) ) !== null ) {
 			} else if ( ( result = face_pattern3.exec( line ) ) !== null ) {
 
 
 				// ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined]
 				// ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined]
 
 
-				if ( result[ 13 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 6 ] ) - 1 ],
-						vertices[ parseInt( result[ 10 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++,
-						[
-							normals[ parseInt( result[ 4 ] ) - 1 ],
-							normals[ parseInt( result[ 8 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 7 ] ) - 1 ],
-						uvs[ parseInt( result[ 11 ] ) - 1 ]
-					] );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 6 ] ) - 1 ],
-						vertices[ parseInt( result[ 10 ] ) - 1 ],
-						vertices[ parseInt( result[ 14 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 4 ] ) - 1 ],
-							normals[ parseInt( result[ 8 ] ) - 1 ],
-							normals[ parseInt( result[ 16 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 3 ] ) - 1 ],
-						uvs[ parseInt( result[ 7 ] ) - 1 ],
-						uvs[ parseInt( result[ 15 ] ) - 1 ]
-					] );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 8 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ],
-							normals[ parseInt( result[ 16 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faceVertexUvs[ 0 ].push( [
-						uvs[ parseInt( result[ 7 ] ) - 1 ],
-						uvs[ parseInt( result[ 11 ] ) - 1 ],
-						uvs[ parseInt( result[ 15 ] ) - 1 ]
-					] );
-
-					verticesCount += 4;
-
-				}
+				handle_face_line(
+					[ result[ 2 ], result[ 6 ], result[ 10 ], result[ 14 ] ], //faces
+					[ result[ 3 ], result[ 7 ], result[ 11 ], result[ 15 ] ], //uv
+					[ result[ 4 ], result[ 8 ], result[ 12 ], result[ 16 ] ] //normal
+				);
 
 
 			} else if ( ( result = face_pattern4.exec( line ) ) !== null ) {
 			} else if ( ( result = face_pattern4.exec( line ) ) !== null ) {
 
 
 				// ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined]
 				// ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined]
 
 
-				if ( result[ 10 ] === undefined ) {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount ++,
-						verticesCount ++,
-						verticesCount ++,
-						[
-							normals[ parseInt( result[ 3 ] ) - 1 ],
-							normals[ parseInt( result[ 6 ] ) - 1 ],
-							normals[ parseInt( result[ 9 ] ) - 1 ]
-						]
-					) );
-
-				} else {
-
-					geometry.vertices.push(
-						vertices[ parseInt( result[ 2 ] ) - 1 ],
-						vertices[ parseInt( result[ 5 ] ) - 1 ],
-						vertices[ parseInt( result[ 8 ] ) - 1 ],
-						vertices[ parseInt( result[ 11 ] ) - 1 ]
-					);
-
-					geometry.faces.push( face3(
-						verticesCount,
-						verticesCount + 1,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 3 ] ) - 1 ],
-							normals[ parseInt( result[ 6 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ]
-						]
-					) );
-
-					geometry.faces.push( face3(
-						verticesCount + 1,
-						verticesCount + 2,
-						verticesCount + 3,
-						[
-							normals[ parseInt( result[ 6 ] ) - 1 ],
-							normals[ parseInt( result[ 9 ] ) - 1 ],
-							normals[ parseInt( result[ 12 ] ) - 1 ]
-						]
-					) );
-
-					verticesCount += 4;
-
-				}
+				handle_face_line(
+					[ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces
+					[ ], //uv
+					[ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //normal
+				);
 
 
 			} else if ( /^o /.test( line ) ) {
 			} else if ( /^o /.test( line ) ) {
 
 
 				// object
 				// object
-
+				
+				meshN();
+				face_offset = face_offset + vertices.length;
+				vertices = [];
 				object = new THREE.Object3D();
 				object = new THREE.Object3D();
 				object.name = line.substring( 2 ).trim();
 				object.name = line.substring( 2 ).trim();
 				group.add( object );
 				group.add( object );
@@ -476,7 +353,7 @@ THREE.OBJMTLLoader.prototype = {
 
 
 		//Add last object
 		//Add last object
 		meshN(undefined, undefined);
 		meshN(undefined, undefined);
-
+		
 		return group;
 		return group;
 
 
 	}
 	}

+ 321 - 53
examples/js/loaders/PLYLoader.js

@@ -8,14 +8,14 @@
  * Limitations: ASCII decoding assumes file is UTF-8.
  * Limitations: ASCII decoding assumes file is UTF-8.
  *
  *
  * Usage:
  * Usage:
- * 	var loader = new THREE.PLYLoader();
- * 	loader.addEventListener( 'load', function ( event ) {
+ *	var loader = new THREE.PLYLoader();
+ *	loader.addEventListener( 'load', function ( event ) {
  *
  *
- * 		var geometry = event.content;
- * 		scene.add( new THREE.Mesh( geometry ) );
+ *		var geometry = event.content;
+ *		scene.add( new THREE.Mesh( geometry ) );
  *
  *
- * 	} );
- * 	loader.load( './models/ply/ascii/dolphins.ply' );
+ *	} );
+ *	loader.load( './models/ply/ascii/dolphins.ply' );
  */
  */
 
 
 
 
@@ -70,10 +70,11 @@ THREE.PLYLoader.prototype = {
 
 
 	},
 	},
 
 
-	isASCII: function(buf){
+	isASCII: function( data ){
 
 
-		// currently only supports ASCII encoded files.
-		return true;
+		var header = this.parseHeader( this.bin2str( data ) );
+		
+		return header.format === "ascii";
 
 
 	},
 	},
 
 
@@ -93,6 +94,159 @@ THREE.PLYLoader.prototype = {
 
 
 	},
 	},
 
 
+	parseHeader: function ( data ) {
+		
+		var patternHeader = /ply([\s\S]*)end_header\n/;
+		var headerText = "";
+		if ( ( result = patternHeader.exec( data ) ) != null ) {
+			headerText = result [ 1 ];
+		}
+		
+		var header = new Object();
+		header.comments = [];
+		header.elements = [];
+		header.headerLength = result[0].length;
+		
+		var lines = headerText.split( '\n' );
+		var currentElement = undefined;
+		var lineType, lineValues;
+
+		function make_ply_element_property(propertValues) {
+			
+			var property = Object();
+
+			property.type = propertValues[0]
+			
+			if ( property.type === "list" ) {
+				
+				property.name = propertValues[3]
+				property.countType = propertValues[1]
+				property.itemType = propertValues[2]
+
+			} else {
+
+				property.name = propertValues[1]
+
+			}
+
+			return property
+			
+		}
+		
+		for ( var i = 0; i < lines.length; i ++ ) {
+
+			var line = lines[ i ];
+			line = line.trim()
+			if ( line === "" ) { continue; }
+			lineValues = line.split( /\s+/ );
+			lineType = lineValues.shift()
+			line = lineValues.join(" ")
+			
+			switch( lineType ) {
+				
+			case "format":
+
+				header.format = lineValues[0];
+				header.version = lineValues[1];
+
+				break;
+
+			case "comment":
+
+				header.comments.push(line);
+
+				break;
+
+			case "element":
+
+				if ( !(currentElement === undefined) ) {
+
+					header.elements.push(currentElement);
+
+				}
+
+				currentElement = Object();
+				currentElement.name = lineValues[0];
+				currentElement.count = parseInt( lineValues[1] );
+				currentElement.properties = [];
+
+				break;
+				
+			case "property":
+
+				currentElement.properties.push( make_ply_element_property( lineValues ) );
+
+				break;
+				
+
+			default:
+
+				console.log("unhandled", lineType, lineValues);
+
+			}
+
+		}
+		
+		if ( !(currentElement === undefined) ) {
+
+			header.elements.push(currentElement);
+
+		}
+		
+		return header;
+		
+	},
+
+	parseASCIINumber: function ( n, type ) {
+		
+		switch( type ) {
+			
+		case 'char': case 'uchar': case 'short': case 'ushort': case 'int': case 'uint':
+		case 'int8': case 'uint8': case 'int16': case 'uint16': case 'int32': case 'uint32':
+
+			return parseInt( n );
+
+		case 'float': case 'double': case 'float32': case 'float64':
+
+			return parseFloat( n );
+			
+		}
+		
+	},
+
+	parseASCIIElement: function ( properties, line ) {
+
+		values = line.split( /\s+/ );
+		
+		var element = Object();
+		
+		for ( var i = 0; i < properties.length; i ++ ) {
+			
+			if ( properties[i].type === "list" ) {
+				
+				var list = [];
+				var n = this.parseASCIINumber( values.shift(), properties[i].countType );
+
+				for ( j = 0; j < n; j ++ ) {
+					
+					list.push( this.parseASCIINumber( values.shift(), properties[i].itemType ) );
+					
+				}
+				
+				element[ properties[i].name ] = list;
+				
+			} else {
+				
+				element[ properties[i].name ] = this.parseASCIINumber( values.shift(), properties[i].type );
+				
+			}
+			
+		}
+		
+		return element;
+		
+	},
+
 	parseASCII: function ( data ) {
 	parseASCII: function ( data ) {
 
 
 		// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
 		// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
@@ -101,73 +255,187 @@ THREE.PLYLoader.prototype = {
 
 
 		var result;
 		var result;
 
 
-		var patternHeader = /ply([\s\S]*)end_header/;
-		var header = "";
-		if ( ( result = patternHeader.exec( data ) ) != null ) {
-			header = result [ 1 ];
-		}
+		var header = this.parseHeader( data );
 
 
-		var patternBody = /end_header([\s\S]*)$/;
+		var patternBody = /end_header\n([\s\S]*)$/;
 		var body = "";
 		var body = "";
 		if ( ( result = patternBody.exec( data ) ) != null ) {
 		if ( ( result = patternBody.exec( data ) ) != null ) {
 			body = result [ 1 ];
 			body = result [ 1 ];
 		}
 		}
+		
+		var lines = body.split( '\n' );
+		var currentElement = 0;
+		var currentElementCount = 0;
+		geometry.useColor = false;
+		
+		for ( var i = 0; i < lines.length; i ++ ) {
+
+			var line = lines[ i ];
+			line = line.trim()
+			if ( line === "" ) { continue; }
+			
+			if ( currentElementCount >= header.elements[currentElement].count ) {
+
+				currentElement++;
+				currentElementCount = 0;
 
 
-		var patternVertexCount = /element[\s]+vertex[\s]+(\d+)/g;
-		var vertexCount = 0;
-		if ( ( result = patternVertexCount.exec( header ) ) != null ) {
-			vertexCount = parseInt( result[ 1 ] );
+			}
+			
+			var element = this.parseASCIIElement( header.elements[currentElement].properties, line );
+			
+			this.handleElement( geometry, header.elements[currentElement].name, element );
+			
+			currentElementCount++;
+			
 		}
 		}
 
 
-		var patternFaceCount = /element[\s]+face[\s]+(\d+)/g;
-		var faceCount = 0;
-		if ( ( result = patternFaceCount.exec( header ) ) != null ) {
-			faceCount = parseInt( result[ 1 ] );
-		}
+		return this.postProcess( geometry );
 
 
-		if ( vertexCount != 0 && faceCount != 0 ) {
-			// Vertex
-			// assume x y z
-			var patternVertex = /([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g;
-			for ( var i = 0; i < vertexCount; i++) {
-				if ( ( result = patternVertex.exec( body ) ) != null ) {
-					geometry.vertices.push( new THREE.Vector3( parseFloat( result[ 1 ] ), parseFloat( result[ 3 ] ), parseFloat( result[ 5 ] ) ) );
-				} else {
-					console.error('Vertex error: vertex count mismatch.');
-					return geometry;
-				}
-			}
+	},
 
 
-			// Face
-			// assume 3 index0 index1 index2
-			var patternFace = /3[\s]+([-+]?[0-9]+)[\s]+([-+]?[0-9]+)[\s]+([-+]?[0-9]+)/g;
-			for (var i = 0; i < faceCount; i++) {
-				if ( ( result = patternFace.exec( body ) ) != null ) {
-					geometry.faces.push( new THREE.Face3( parseInt( result[ 1 ] ), parseInt( result[ 2 ] ), parseInt( result[ 3 ] ) ) );
-				} else {
-					console.error('Face error: vertex count mismatch.');
-					return geometry;
-				}
+	postProcess: function ( geometry ) {
+		
+		if ( geometry.useColor ) {
+			
+			for ( var i = 0; i < geometry.faces.length; i ++ ) {
+				
+				geometry.faces[i].vertexColors = [
+					geometry.colors[geometry.faces[i].a],
+					geometry.colors[geometry.faces[i].b],
+					geometry.colors[geometry.faces[i].c]
+				];
+				
 			}
 			}
-
-		} else {
-			console.error( 'Header error: vertexCount(' + vertexCount + '), faceCount(' + faceCount + ').' );
+			
+			geometry.elementsNeedUpdate = true;
+			
 		}
 		}
 
 
 		geometry.computeCentroids();
 		geometry.computeCentroids();
 		geometry.computeBoundingSphere();
 		geometry.computeBoundingSphere();
 
 
 		return geometry;
 		return geometry;
+		
+	},
+
+	handleElement: function ( geometry, elementName, element ) {
+		
+		if ( elementName === "vertex" ) {
+
+			geometry.vertices.push(
+				new THREE.Vector3( element.x, element.y, element.z )
+			);
+			
+			if ( 'red' in element && 'green' in element && 'blue' in element ) {
+				
+				geometry.useColor = true;
+				
+				color = new THREE.Color();
+				color.setRGB( element.red / 255.0, element.green / 255.0, element.blue / 255.0 );
+				geometry.colors.push( color );
+				
+			}
+
+		} else if ( elementName === "face" ) {
+
+			geometry.faces.push(
+				new THREE.Face3( element.vertex_indices[0], element.vertex_indices[1], element.vertex_indices[2] )
+			);
 
 
+		}
+		
 	},
 	},
 
 
-	parseBinary: function (buf) {
+	binaryRead: function ( dataview, at, type, little_endian ) {
 
 
-		// not supported yet
-		console.error('Not supported yet.');
+		switch( type ) {
 
 
-	}
+			// corespondences for non-specific length types here match rply:
+		case 'int8':		case 'char':	 return [ dataview.getInt8( at ), 1 ];
 
 
+		case 'uint8':		case 'uchar':	 return [ dataview.getUint8( at ), 1 ];
+
+		case 'int16':		case 'short':	 return [ dataview.getInt16( at, little_endian ), 2 ];
+
+		case 'uint16':	case 'ushort': return [ dataview.getUint16( at, little_endian ), 2 ];
+
+		case 'int32':		case 'int':		 return [ dataview.getInt32( at, little_endian ), 4 ];
+
+		case 'uint32':	case 'uint':	 return [ dataview.getUint32( at, little_endian ), 4 ];
+
+		case 'float32': case 'float':	 return [ dataview.getFloat32( at, little_endian ), 4 ];
+
+		case 'float64': case 'double': return [ dataview.getFloat64( at, little_endian ), 8 ];
+			
+		}
+		
+	},
+
+	binaryReadElement: function ( dataview, at, properties, little_endian ) {
+		
+		var element = Object();
+		var result, read = 0;
+		
+		for ( var i = 0; i < properties.length; i ++ ) {
+		 
+			if ( properties[i].type === "list" ) {
+				
+				var list = [];
+
+				result = this.binaryRead( dataview, at+read, properties[i].countType, little_endian );
+				var n = result[0];
+				read += result[1];
+				
+				for ( j = 0; j < n; j ++ ) {
+					
+					result = this.binaryRead( dataview, at+read, properties[i].itemType, little_endian );
+					list.push( result[0] );
+					read += result[1];
+					
+				}
+				
+				element[ properties[i].name ] = list;
+				
+			} else {
+				
+				result = this.binaryRead( dataview, at+read, properties[i].type, little_endian );
+				element[ properties[i].name ] = result[0];
+				read += result[1];
+				
+			}
+			
+		}
+		
+		return [ element, read ];
+		
+	},
+
+	parseBinary: function ( data ) {
+
+		var geometry = new THREE.Geometry();
+
+		var header = this.parseHeader( this.bin2str( data ) );
+		var little_endian = (header.format === "binary_little_endian");
+		var body = new DataView( data, header.headerLength );
+		var result, loc = 0;
+
+		for ( var currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {
+			
+			for ( var currentElementCount = 0; currentElementCount < header.elements[currentElement].count; currentElementCount ++ ) {
+			
+				result = this.binaryReadElement( body, loc, header.elements[currentElement].properties, little_endian );
+				loc += result[1];
+				var element = result[0];
+			
+				this.handleElement( geometry, header.elements[currentElement].name, element );
+			
+			}
+			
+		}
+		
+		return this.postProcess( geometry );
+		
+	}
 
 
 };
 };
 
 

+ 2558 - 0
examples/models/ply/ascii/dolphins_colored.ply

@@ -0,0 +1,2558 @@
+ply
+format ascii 1.0
+comment VCGLIB generated
+element vertex 855
+property float x
+property float y
+property float z
+property uchar red
+property uchar green
+property uchar blue
+property uchar alpha
+element face 1689
+property list uchar int vertex_indices
+end_header
+13.6601 0 548.364 255 0 0 255 
+-24.9399 0 513.564 255 0 0 255 
+-19.6099 -8.13 512.804 255 0 0 255 
+21.2801 -6.1 547.094 255 0 0 255 
+46.6801 0 564.364 255 0 0 255 
+49.9901 -3.56 561.324 255 0 0 255 
+78.1801 0 566.654 255 0 0 255 
+79.9601 -1.27 562.334 255 0 0 255 
+96.2101 0 561.824 255 0 0 255 
+88.8501 0 496.294 255 0 0 255 
+78.1801 0 521.184 255 0 0 255 
+78.6901 -9.91 503.154 255 0 0 255 
+39.0601 -11.68 511.024 255 0 0 255 
+54.0501 -6.1 532.364 255 0 0 255 
+64.7201 -3.56 544.044 255 0 0 255 
+-201.22 0 402.574 255 0 0 255 
+-196.14 -7.62 406.384 255 0 0 255 
+-190.81 0 414.254 255 0 0 255 
+-173.28 0 430.004 255 0 0 255 
+-177.09 -13.97 423.654 255 0 0 255 
+-113.59 0 472.924 255 0 0 255 
+-147.63 0 449.304 255 0 0 255 
+-152.45 -5.33 444.484 255 0 0 255 
+-114.61 -18.29 466.834 255 0 0 255 
+-151.44 -13.97 442.444 255 0 0 255 
+-70.9199 0 493.504 255 0 0 255 
+-71.6799 -22.35 488.164 255 0 0 255 
+-22.6599 -24.64 497.824 255 0 0 255 
+35.5101 -26.67 496.294 255 0 0 255 
+91.6401 -20.32 484.354 255 0 0 255 
+157.94 -11.68 448.294 255 0 0 255 
+159.21 0 452.354 255 0 0 255 
+199.85 0 417.304 255 0 0 255 
+192.23 -14.73 408.154 255 0 0 255 
+217.88 0 393.684 255 0 0 255 
+207.97 -11.94 381.234 255 0 0 255 
+230.33 0 369.804 255 0 0 255 
+220.93 -7.87 358.374 255 0 0 255 
+236.42 0 349.734 255 0 0 255 
+230.83 -9.65 342.374 255 0 0 255 
+232.61 0 330.944 255 0 0 255 
+228.55 -7.37 334.754 255 0 0 255 
+-153.98 -22.35 436.094 255 0 0 255 
+-137.72 -32.77 434.824 255 0 0 255 
+-108.26 -29.97 452.864 255 0 0 255 
+-71.1699 -32 469.374 255 0 0 255 
+-22.6599 -35.81 480.044 255 0 0 255 
+27.8901 -34.04 478.774 255 0 0 255 
+88.3401 -28.45 470.894 255 0 0 255 
+154.63 -18.29 441.434 255 0 0 255 
+-159.56 -31.75 423.394 255 0 0 255 
+-149.4 -36.58 421.874 255 0 0 255 
+-167.18 -27.43 416.284 255 0 0 255 
+-183.44 -20.83 399.264 255 0 0 255 
+-197.66 -10.16 385.044 255 0 0 255 
+-158.04 -30.99 416.284 255 0 0 255 
+-147.12 -35.81 411.964 255 0 0 255 
+-199.44 -13.97 377.424 255 0 0 255 
+-224.33 -7.37 346.944 255 0 0 255 
+-219.25 -7.37 344.654 255 0 0 255 
+-192.58 -14.99 367.774 255 0 0 255 
+-206.81 0 376.154 255 0 0 255 
+-230.43 0 344.654 255 0 0 255 
+-229.16 -4.06 343.134 255 0 0 255 
+-204.01 -5.08 378.444 255 0 0 255 
+-160.58 -30.73 410.444 255 0 0 255 
+-167.95 -30.48 402.574 255 0 0 255 
+-166.93 -30.73 399.774 255 0 0 255 
+-180.39 -26.42 395.204 255 0 0 255 
+-177.09 -25.91 389.874 255 0 0 255 
+-188.77 -16.26 363.964 255 0 0 255 
+-212.9 -8.38 343.644 255 0 0 255 
+-170.49 -25.91 378.944 255 0 0 255 
+-161.6 -34.54 394.184 255 0 0 255 
+-138.74 -34.8 386.314 255 0 0 255 
+-167.95 -27.43 373.364 255 0 0 255 
+-156.52 -34.8 399.524 255 0 0 255 
+-154.48 -34.54 408.664 255 0 0 255 
+-140.77 -38.61 397.994 255 0 0 255 
+-209.09 -10.92 340.844 255 0 0 255 
+-187.25 -18.29 358.884 255 0 0 255 
+-150.67 -31.75 381.234 255 0 0 255 
+-163.88 -17.02 351.774 255 0 0 255 
+-128.32 -22.35 361.164 255 0 0 255 
+-181.41 -10.16 351.004 255 0 0 255 
+-186.74 -17.27 355.324 255 0 0 255 
+-99.8699 -43.18 382.504 255 0 0 255 
+-98.0999 -35.05 372.594 255 0 0 255 
+-136.45 -40.39 399.014 255 0 0 255 
+-96.8299 -49.28 412.734 255 0 0 255 
+-131.37 -40.13 416.794 255 0 0 255 
+-130.35 -36.58 429.744 255 0 0 255 
+-100.13 -42.67 436.354 255 0 0 255 
+-68.6299 -46.23 446.004 255 0 0 255 
+-56.6899 -51.05 420.854 255 0 0 255 
+-18.0899 -48.01 448.294 255 0 0 255 
+-13.0099 -51.05 429.494 255 0 0 255 
+29.9201 -46.23 453.374 255 0 0 255 
+31.9501 -49.02 429.744 255 0 0 255 
+85.8001 -43.94 447.274 255 0 0 255 
+85.2901 -44.7 420.354 255 0 0 255 
+144.98 -33.02 422.384 255 0 0 255 
+134.82 -28.45 400.034 255 0 0 255 
+180.29 -23.37 397.494 255 0 0 255 
+165.56 -21.84 377.674 255 0 0 255 
+198.07 -13.97 373.364 255 0 0 255 
+187.4 -14.22 362.434 255 0 0 255 
+210.01 -9.91 356.854 255 0 0 255 
+199.34 -10.67 349.994 255 0 0 255 
+224.23 -18.29 338.564 255 0 0 255 
+-61.0099 -41.15 388.094 255 0 0 255 
+-11.4799 -37.59 395.454 255 0 0 255 
+26.3601 -38.1 397.494 255 0 0 255 
+74.6201 -30.99 394.954 255 0 0 255 
+124.41 -17.27 381.484 255 0 0 255 
+157.94 -9.65 361.424 255 0 0 255 
+178.76 -7.11 353.044 255 0 0 255 
+199.85 -5.59 336.024 255 0 0 255 
+209.24 -11.94 327.894 255 0 0 255 
+-71.6799 -73.66 357.354 255 0 0 255 
+-72.4399 -71.37 354.564 255 0 0 255 
+-49.5799 -64.52 368.534 255 0 0 255 
+-25.9599 -77.22 353.294 255 0 0 255 
+-40.1799 -80.77 350.504 255 0 0 255 
+-60.4999 -80.01 353.044 255 0 0 255 
+-15.0399 0 382.254 255 0 0 255 
+-58.4699 0 372.344 255 0 0 255 
+72.3401 0 384.024 255 0 0 255 
+127.71 0 377.174 255 0 0 255 
+175.21 0 350.504 255 0 0 255 
+199.59 0 333.994 255 0 0 255 
+-123.75 0 358.624 255 0 0 255 
+-88.9499 0 365.744 255 0 0 255 
+-156.01 0 348.974 255 0 0 255 
+-178.61 0 348.974 255 0 0 255 
+-206.55 -7.87 337.804 255 0 0 255 
+-203.51 0 336.534 255 0 0 255 
+-220.02 -4.57 330.684 255 0 0 255 
+-222.3 0 328.404 255 0 0 255 
+234.9 -63.25 286.494 255 0 0 255 
+221.44 -73.15 304.524 255 0 0 255 
+236.17 -86.61 277.854 255 0 0 255 
+228.04 -16.51 324.334 255 0 0 255 
+233.63 -9.65 310.114 255 0 0 255 
+232.1 0 318.244 255 0 0 255 
+238.2 -5.84 301.224 255 0 0 255 
+234.39 0 308.334 255 0 0 255 
+222.45 -24.13 336.024 255 0 0 255 
+-227.13 0 338.054 255 0 0 255 
+-226.62 -3.81 337.804 255 0 0 255 
+-224.84 -4.83 332.724 255 0 0 255 
+-226.62 0 331.954 255 0 0 255 
+-59.9999 -78.23 350.244 255 0 0 255 
+-39.9299 -79.25 349.234 255 0 0 255 
+87.5801 0 542.014 255 0 0 255 
+99.2601 0 553.704 255 0 0 255 
+28.1401 0 385.804 255 0 0 255 
+154.89 0 360.664 255 0 0 255 
+209.5 0 325.354 255 0 0 255 
+214.58 -52.32 317.734 255 0 0 255 
+219.66 -73.15 302.744 255 0 0 255 
+217.63 -52.32 320.784 255 0 0 255 
+236.42 -21.59 294.364 255 0 0 255 
+-150.93 0 447.274 255 0 0 255 
+21.2801 6.1 547.094 255 0 0 255 
+-19.6099 8.13 512.804 255 0 0 255 
+49.9901 3.56 561.324 255 0 0 255 
+79.9601 1.27 562.334 255 0 0 255 
+78.6901 9.91 503.154 255 0 0 255 
+54.0501 6.1 532.364 255 0 0 255 
+39.0601 11.68 511.024 255 0 0 255 
+64.7201 3.56 544.044 255 0 0 255 
+-196.14 7.62 406.384 255 0 0 255 
+-177.09 13.97 423.654 255 0 0 255 
+-152.45 5.33 444.484 255 0 0 255 
+-151.44 13.97 442.444 255 0 0 255 
+-114.61 18.29 466.834 255 0 0 255 
+-71.6799 22.35 488.164 255 0 0 255 
+-22.6599 24.64 497.824 255 0 0 255 
+35.5101 26.67 496.294 255 0 0 255 
+91.6401 20.32 484.354 255 0 0 255 
+157.94 11.68 448.294 255 0 0 255 
+192.23 14.73 408.154 255 0 0 255 
+207.97 11.94 381.234 255 0 0 255 
+220.93 7.87 358.374 255 0 0 255 
+230.83 9.65 342.374 255 0 0 255 
+228.55 7.37 334.754 255 0 0 255 
+-153.98 22.35 436.094 255 0 0 255 
+-137.72 32.77 434.824 255 0 0 255 
+-108.26 29.97 452.864 255 0 0 255 
+-71.1699 32 469.374 255 0 0 255 
+-22.6599 35.81 480.044 255 0 0 255 
+27.8901 34.04 478.774 255 0 0 255 
+88.3401 28.45 470.894 255 0 0 255 
+154.63 18.29 441.434 255 0 0 255 
+-149.4 36.58 421.874 255 0 0 255 
+-159.56 31.75 423.394 255 0 0 255 
+-167.18 27.43 416.284 255 0 0 255 
+-183.44 20.83 399.264 255 0 0 255 
+-197.66 10.16 385.044 255 0 0 255 
+-147.12 35.81 411.964 255 0 0 255 
+-158.04 30.99 416.284 255 0 0 255 
+-199.44 13.97 377.424 255 0 0 255 
+-219.25 7.37 344.654 255 0 0 255 
+-224.33 7.37 346.944 255 0 0 255 
+-192.58 14.99 367.774 255 0 0 255 
+-204.01 5.08 378.444 255 0 0 255 
+-229.16 4.06 343.134 255 0 0 255 
+-160.58 30.73 410.444 255 0 0 255 
+-166.93 30.73 399.774 255 0 0 255 
+-167.95 30.48 402.574 255 0 0 255 
+-180.39 26.42 395.204 255 0 0 255 
+-177.09 25.91 389.874 255 0 0 255 
+-188.77 16.26 363.964 255 0 0 255 
+-212.9 8.38 343.644 255 0 0 255 
+-170.49 25.91 378.944 255 0 0 255 
+-161.6 34.54 394.184 255 0 0 255 
+-138.74 34.8 386.314 255 0 0 255 
+-167.95 27.43 373.364 255 0 0 255 
+-156.52 34.8 399.524 255 0 0 255 
+-154.48 34.54 408.664 255 0 0 255 
+-140.77 38.61 397.994 255 0 0 255 
+-209.09 10.92 340.844 255 0 0 255 
+-187.25 18.29 358.884 255 0 0 255 
+-163.88 17.02 351.774 255 0 0 255 
+-150.67 31.75 381.234 255 0 0 255 
+-128.32 22.35 361.164 255 0 0 255 
+-181.41 10.16 351.004 255 0 0 255 
+-186.74 17.27 355.324 255 0 0 255 
+-99.8699 43.18 382.504 255 0 0 255 
+-98.0999 35.05 372.594 255 0 0 255 
+-136.45 40.39 399.014 255 0 0 255 
+-96.8299 49.28 412.734 255 0 0 255 
+-131.37 40.13 416.794 255 0 0 255 
+-130.35 36.58 429.744 255 0 0 255 
+-100.13 42.67 436.354 255 0 0 255 
+-68.6299 46.23 446.004 255 0 0 255 
+-56.6899 51.05 420.854 255 0 0 255 
+-18.0899 48.01 448.294 255 0 0 255 
+-13.0099 51.05 429.494 255 0 0 255 
+29.9201 46.23 453.374 255 0 0 255 
+31.9501 49.02 429.744 255 0 0 255 
+85.8001 43.94 447.274 255 0 0 255 
+85.2901 44.7 420.354 255 0 0 255 
+144.98 33.02 422.384 255 0 0 255 
+134.82 28.45 400.034 255 0 0 255 
+180.29 23.37 397.494 255 0 0 255 
+165.56 21.84 377.674 255 0 0 255 
+198.07 13.97 373.364 255 0 0 255 
+187.4 14.22 362.434 255 0 0 255 
+210.01 9.91 356.854 255 0 0 255 
+199.34 10.67 349.994 255 0 0 255 
+224.23 18.29 338.564 255 0 0 255 
+-61.0099 41.15 388.094 255 0 0 255 
+-11.4799 37.59 395.454 255 0 0 255 
+26.3601 38.1 397.494 255 0 0 255 
+74.6201 30.99 394.954 255 0 0 255 
+124.41 17.27 381.484 255 0 0 255 
+157.94 9.65 361.424 255 0 0 255 
+178.76 7.11 353.044 255 0 0 255 
+199.85 5.59 336.024 255 0 0 255 
+209.24 11.94 327.894 255 0 0 255 
+-71.6799 73.66 357.354 255 0 0 255 
+-72.4399 71.37 354.564 255 0 0 255 
+-49.5799 64.52 368.534 255 0 0 255 
+-25.9599 77.22 353.294 255 0 0 255 
+-60.4999 80.01 353.044 255 0 0 255 
+-40.1799 80.77 350.504 255 0 0 255 
+-206.55 7.87 337.804 255 0 0 255 
+-220.02 4.57 330.684 255 0 0 255 
+236.17 86.61 277.854 255 0 0 255 
+221.44 73.15 304.524 255 0 0 255 
+234.9 63.25 286.494 255 0 0 255 
+228.04 16.51 324.334 255 0 0 255 
+233.63 9.65 310.114 255 0 0 255 
+238.2 5.84 301.224 255 0 0 255 
+222.45 24.13 336.024 255 0 0 255 
+-226.62 3.81 337.804 255 0 0 255 
+-224.84 4.83 332.724 255 0 0 255 
+-39.9299 79.25 349.234 255 0 0 255 
+-59.9999 78.23 350.244 255 0 0 255 
+219.66 73.15 302.744 255 0 0 255 
+214.58 52.32 317.734 255 0 0 255 
+217.63 52.32 320.784 255 0 0 255 
+236.42 21.59 294.364 255 0 0 255 
+-226.812 0 232.62 0 255 40 255 
+-265.411 0 197.82 0 255 84 255 
+-260.082 -8.13 197.06 0 255 64 255 
+-219.191 -6.1 231.35 0 255 20 255 
+-193.792 0 248.62 0 255 10 255 
+-190.482 -3.56 245.58 2 255 0 255 
+-162.292 0 250.91 2 255 0 255 
+-160.512 -1.27 246.59 12 255 0 255 
+-144.262 0 246.08 12 255 0 255 
+-151.622 0 180.55 165 255 0 255 
+-162.292 0 205.44 107 255 0 255 
+-161.782 -9.91 187.41 138 255 0 255 
+-201.411 -11.68 195.28 56 255 0 255 
+-186.422 -6.1 216.62 53 255 0 255 
+-175.751 -3.56 228.3 50 255 0 255 
+-443.296 0 110.65 0 60 255 255 
+-437.918 -7.62 114.026 0 80 255 255 
+-431.955 0 121.428 0 86 255 255 
+-413.181 0 135.672 0 124 255 255 
+-417.503 -13.97 129.659 0 127 255 255 
+-350.141 0 173.502 0 255 252 255 
+-386.02 0 152.782 0 181 255 255 
+-391.223 -5.33 148.377 0 175 255 255 
+-351.662 -18.29 167.517 0 255 242 255 
+-390.385 -13.97 146.261 0 185 255 255 
+-305.914 0 190.478 0 255 164 255 
+-307.113 -22.35 185.219 0 255 151 255 
+-263.132 -24.64 182.08 0 255 57 255 
+-204.962 -26.67 180.55 62 255 0 255 
+-148.832 -20.32 168.61 184 255 0 255 
+-93.9607 -11.68 156.706 255 209 0 255 
+-94.249 0 160.947 255 217 0 255 
+-53.2208 0 148.077 255 131 0 255 
+-53.8795 -14.73 136.347 255 113 0 255 
+-28.599 0 139.466 255 84 0 255 
+-27.6869 -11.94 123.685 255 52 0 255 
+-5.11479 0 130.218 255 56 0 255 
+-3.27847 -7.87 115.57 255 24 0 255 
+13.5002 0 121.323 255 64 0 255 
+15.5502 -9.65 112.299 255 55 0 255 
+25.9516 0 106.637 255 88 0 255 
+20.0443 -7.37 105.697 255 71 0 255 
+-393.443 -22.35 140.143 0 184 255 255 
+-377.343 -32.77 137.531 0 223 255 255 
+-346.491 -29.97 153.069 0 255 224 255 
+-308.161 -32 166.451 0 255 145 255 
+-263.132 -35.81 164.3 0 255 48 255 
+-212.582 -34.04 163.03 57 255 0 255 
+-152.132 -28.45 155.15 186 255 0 255 
+-94.3022 -18.29 149.11 255 202 0 255 
+-400.055 -31.75 127.949 0 174 255 255 
+-390.056 -36.58 125.592 0 197 255 255 
+-408.238 -27.43 121.494 0 155 255 255 
+-425.851 -20.83 105.879 0 115 255 255 
+-441.2 -10.16 92.8853 0 76 255 255 
+-399.129 -30.99 120.737 0 176 255 255 
+-388.604 -35.81 115.528 0 202 255 255 
+-443.605 -13.97 85.4389 0 78 255 255 
+-470.933 -7.37 57.1247 0 20 255 255 
+-466.06 -7.37 54.4219 0 30 255 255 
+-437.567 -14.99 75.254 0 92 255 255 
+-451.055 0 84.7835 0 44 255 255 
+-477.202 0 55.3477 0 0 255 255 
+-476.062 -4.06 53.7277 0 7 255 255 
+-448.074 -5.08 86.8338 0 57 255 255 
+-402.144 -30.73 115.128 0 170 255 255 
+-410.14 -30.48 107.895 0 154 255 255 
+-409.356 -30.73 105.02 0 156 255 255 
+-423.148 -26.42 101.58 0 126 255 255 
+-420.301 -25.91 95.9954 0 131 255 255 
+-434.086 -16.26 71.1415 0 101 255 255 
+-459.816 -8.38 52.8895 0 43 255 255 
+-414.628 -25.91 84.5564 0 145 255 255 
+-404.507 -34.54 99.0079 0 168 255 255 
+-382.377 -34.8 89.2719 0 215 255 255 
+-412.559 -27.43 78.7852 0 151 255 255 
+-399.002 -34.8 103.909 0 180 255 255 
+-396.212 -34.54 112.849 0 186 255 255 
+-383.433 -38.61 101.08 0 214 255 255 
+-456.251 -10.92 49.7836 0 52 255 255 
+-432.992 -18.29 65.9531 0 105 255 255 
+-394.687 -31.75 85.1973 0 189 255 255 
+-410.291 -17.02 56.9323 0 154 254 254 
+-374.075 -22.35 63.3454 0 232 255 255 
+-427.824 -10.16 57.6166 0 115 255 255 
+-432.778 -17.27 62.3631 0 105 255 255 
+-343.956 -43.18 82.2562 0 255 209 255 
+-343.013 -35.05 72.2337 0 255 210 255 
+-379.043 -40.39 101.739 0 224 254 254 
+-338.423 -49.28 112.131 0 255 198 255 
+-372.508 -40.13 119.037 0 237 255 255 
+-370.419 -36.58 131.858 0 239 255 255 
+-339.756 -42.67 135.943 0 255 204 255 
+-307.565 -46.23 142.951 0 255 137 255 
+-297.749 -51.05 116.899 0 255 112 255 
+-258.562 -48.01 132.55 0 255 31 255 
+-253.482 -51.05 113.75 0 255 18 255 
+-210.551 -46.23 137.63 68 255 0 255 
+-208.521 -49.02 114 77 255 0 255 
+-154.672 -43.94 131.53 188 255 0 255 
+-155.182 -44.7 104.61 191 255 0 255 
+-95.8451 -33.02 127.853 255 194 0 255 
+-97.1407 -28.45 103.346 255 190 0 255 
+-57.3849 -23.37 121.064 255 109 0 255 
+-59.4882 -21.84 96.521 255 110 0 255 
+-30.0968 -13.97 111.396 255 44 0 255 
+-31.8031 -14.22 96.2092 255 52 0 255 
+-10.0972 -9.91 106.796 255 0 0 255 
+-13.6219 -10.67 94.4402 255 27 0 255 
+13.9583 -18.29 104.714 255 54 0 255 
+-304.767 -41.15 84.6091 0 255 126 255 
+-251.952 -37.59 79.7098 0 255 14 255 
+-214.112 -38.1 81.7498 66 255 0 255 
+-165.852 -30.99 79.2098 168 255 0 255 
+-100.528 -17.27 82.3284 255 201 0 255 
+-57.8264 -9.65 78.6461 255 119 0 255 
+-33.3411 -7.11 83.4557 255 72 0 255 
+-3.05347 -5.59 84.6762 255 55 0 255 
+10.9947 -11.94 86.1008 255 67 0 255 
+-317.945 -73.66 69.0449 0 255 207 255 
+-318.934 -71.37 67.2508 0 255 211 255 
+-294.996 -64.52 75.1924 0 255 183 255 
+-272.719 -77.22 63.8741 0 255 243 255 
+-287.121 -80.77 62.8159 0 255 242 255 
+-307.161 -80.01 65.598 0 255 227 255 
+-255.512 0 66.5098 0 255 27 255 
+-303.54 0 68.7029 0 255 128 255 
+-168.132 0 68.2798 157 255 0 255 
+-95.5019 0 79.4587 255 201 0 255 
+-34.955 0 79.2651 255 87 0 255 
+-1.74321 0 83.0497 255 68 0 255 
+-369.731 0 60.4357 0 239 254 254 
+-334.461 0 64.6495 0 255 194 255 
+-402.68 0 53.4902 0 167 255 255 
+-425.202 0 55.3617 0 120 255 255 
+-453.971 -7.87 46.5438 0 55 255 255 
+-451.047 0 45.0264 0 60 255 255 
+-467.984 -4.57 40.5636 0 23 255 255 
+-470.445 0 38.4802 0 17 255 255 
+67.3042 -63.25 84.656 255 215 0 255 
+40.4659 -73.15 81.6897 255 190 0 255 
+76.6564 -86.61 81.9515 246 255 0 255 
+28.2489 -16.51 98.899 254 87 0 254 
+44.5047 -9.65 95.526 255 124 0 255 
+36.3058 0 98.7424 255 112 0 255 
+55.7289 -5.84 94.9715 255 149 0 255 
+46.6273 0 95.235 255 134 0 255 
+14.6811 -24.13 101.688 255 61 0 255 
+-474.46 0 48.4971 0 3 255 255 
+-473.972 -3.81 48.2057 0 11 255 255 
+-472.619 -4.83 42.9957 0 14 255 255 
+-474.457 0 42.3758 0 6 255 255 
+-306.894 -78.23 63.7284 0 255 224 255 
+-286.977 -79.25 61.9666 0 255 239 255 
+-152.892 0 226.27 58 255 0 255 
+-141.212 0 237.96 23 255 0 255 
+-212.332 0 70.0598 64 255 0 255 
+-60.3815 0 76.4308 255 132 0 255 
+13.2402 0 84.6209 255 86 0 255 
+23.6031 -52.32 83.7838 255 135 0 255 
+40.6611 -73.15 79.116 255 192 0 255 
+23.4522 -52.32 88.1758 255 131 0 255 
+60.8854 -21.59 89.8955 255 164 0 255 
+-389.477 0 151.032 0 174 255 255 
+-219.191 6.1 231.35 0 255 22 255 
+-260.082 8.13 197.06 0 255 77 255 
+-190.482 3.56 245.58 0 255 8 255 
+-160.512 1.27 246.59 12 255 0 255 
+-161.782 9.91 187.41 133 255 0 255 
+-186.422 6.1 216.62 53 255 0 255 
+-201.411 11.68 195.28 47 255 0 255 
+-175.751 3.56 228.3 39 255 0 255 
+-437.918 7.62 114.026 0 60 255 255 
+-417.503 13.97 129.659 0 96 255 255 
+-391.223 5.33 148.377 0 163 255 255 
+-390.385 13.97 146.261 0 153 255 255 
+-351.662 18.29 167.517 0 240 255 255 
+-307.113 22.35 185.219 0 255 173 255 
+-263.132 24.64 182.08 0 255 79 255 
+-204.962 26.67 180.55 44 255 0 255 
+-148.832 20.32 168.61 167 255 0 255 
+-93.9607 11.68 156.706 255 223 0 255 
+-53.8795 14.73 136.347 255 147 0 255 
+-27.6869 11.94 123.685 255 107 0 255 
+-3.27847 7.87 115.57 255 87 0 255 
+15.5502 9.65 112.299 255 92 0 255 
+20.0443 7.37 105.697 255 98 0 255 
+-393.443 22.35 140.143 0 149 255 255 
+-377.343 32.77 137.531 0 186 255 255 
+-346.491 29.97 153.069 0 250 255 255 
+-308.161 32 166.451 0 255 175 255 
+-263.132 35.81 164.3 0 255 79 255 
+-212.582 34.04 163.03 28 255 0 255 
+-152.132 28.45 155.15 157 255 0 255 
+-94.3022 18.29 149.11 255 227 0 255 
+-390.056 36.58 125.592 0 163 255 255 
+-400.055 31.75 127.949 0 140 255 255 
+-408.238 27.43 121.494 0 123 255 255 
+-425.851 20.83 105.879 0 89 255 255 
+-441.2 10.16 92.8853 0 58 255 255 
+-388.604 35.81 115.528 0 170 254 254 
+-399.129 30.99 120.737 0 144 255 255 
+-443.605 13.97 85.4389 0 64 255 255 
+-466.06 7.37 54.4219 0 25 255 255 
+-470.933 7.37 57.1247 0 14 255 255 
+-437.567 14.99 75.254 0 81 255 255 
+-448.074 5.08 86.8338 0 42 255 255 
+-476.062 4.06 53.7277 0 3 255 255 
+-402.144 30.73 115.128 0 140 255 255 
+-409.356 30.73 105.02 0 131 254 254 
+-410.14 30.48 107.895 0 127 255 255 
+-423.148 26.42 101.58 0 102 255 255 
+-420.301 25.91 95.9954 0 111 255 255 
+-434.086 16.26 71.1415 0 91 255 255 
+-459.816 8.38 52.8895 0 39 255 255 
+-414.628 25.91 84.5564 0 128 255 255 
+-404.507 34.54 99.0079 0 145 255 255 
+-382.377 34.8 89.2719 0 195 255 255 
+-412.559 27.43 78.7852 0 137 255 255 
+-399.002 34.8 103.909 0 154 255 255 
+-396.212 34.54 112.849 0 156 255 255 
+-383.433 38.61 101.08 0 189 255 255 
+-456.251 10.92 49.7836 0 49 255 255 
+-432.992 18.29 65.9531 0 98 255 255 
+-410.291 17.02 56.9323 0 149 255 255 
+-394.687 31.75 85.1973 0 172 254 254 
+-374.075 22.35 63.3454 0 224 255 255 
+-427.824 10.16 57.6166 0 112 255 255 
+-432.778 17.27 62.3631 0 100 255 255 
+-343.956 43.18 82.2562 0 255 230 255 
+-343.013 35.05 72.2337 0 255 224 255 
+-379.043 40.39 101.739 0 198 255 255 
+-338.423 49.28 112.131 0 255 230 255 
+-372.508 40.13 119.037 0 203 255 255 
+-370.419 36.58 131.858 0 201 255 255 
+-339.756 42.67 135.943 0 255 243 255 
+-307.565 46.23 142.951 0 255 176 255 
+-297.749 51.05 116.899 0 255 150 255 
+-258.562 48.01 132.55 0 255 75 255 
+-253.482 51.05 113.75 0 255 58 255 
+-210.551 46.23 137.63 25 255 0 255 
+-208.521 49.02 114 32 255 0 255 
+-154.672 43.94 131.53 140 255 0 255 
+-155.182 44.7 104.61 145 254 0 254 
+-95.8451 33.02 127.853 255 246 0 255 
+-97.1407 28.45 103.346 255 245 0 255 
+-57.3849 23.37 121.064 255 171 0 255 
+-59.4882 21.84 96.521 255 168 0 255 
+-30.0968 13.97 111.396 255 128 0 255 
+-31.8031 14.22 96.2092 255 123 0 255 
+-10.0972 9.91 106.796 255 110 0 255 
+-13.6219 10.67 94.4402 255 105 0 255 
+13.9583 18.29 104.714 255 115 0 255 
+-304.767 41.15 84.6091 0 255 146 255 
+-251.952 37.59 79.7098 0 255 34 255 
+-214.112 38.1 81.7498 42 255 0 255 
+-165.852 30.99 79.2098 145 255 0 255 
+-100.528 17.27 82.3284 255 226 0 255 
+-57.8264 9.65 78.6461 255 139 0 255 
+-33.3411 7.11 83.4557 255 99 0 255 
+-3.05347 5.59 84.6762 254 80 0 254 
+10.9947 11.94 86.1008 255 104 0 255 
+-317.945 73.66 69.0449 0 255 233 255 
+-318.934 71.37 67.2508 0 255 226 255 
+-294.996 64.52 75.1924 0 255 204 255 
+-272.719 77.22 63.8741 0 246 255 255 
+-307.161 80.01 65.598 0 255 252 255 
+-287.121 80.77 62.8159 0 245 255 255 
+-453.971 7.87 46.5438 0 54 255 255 
+-467.984 4.57 40.5636 0 22 255 255 
+76.6564 86.61 81.9515 197 255 0 255 
+40.4659 73.15 81.6897 255 249 0 255 
+67.3042 63.25 84.656 249 255 0 255 
+28.2489 16.51 98.899 255 127 0 255 
+44.5047 9.65 95.526 255 140 0 255 
+55.7289 5.84 94.9715 255 157 0 255 
+14.6811 24.13 101.688 255 129 0 255 
+-473.972 3.81 48.2057 0 8 255 255 
+-472.619 4.83 42.9957 0 12 255 255 
+-286.977 79.25 61.9666 0 248 255 255 
+-306.894 78.23 63.7284 0 255 247 255 
+40.6611 73.15 79.116 255 249 0 255 
+23.6031 52.32 83.7838 255 193 0 255 
+23.4522 52.32 88.1758 255 192 0 255 
+60.8854 21.59 89.8955 255 186 0 255 
+60.3909 0 -14.267 255 0 0 255 
+21.7909 0 -49.0671 255 0 0 255 
+27.1209 -8.13 -49.827 255 0 0 255 
+68.0109 -6.1 -15.5371 255 0 0 255 
+93.4109 0 1.73289 255 0 0 255 
+96.7209 -3.56 -1.30702 255 0 0 255 
+124.911 0 4.02293 255 0 0 255 
+126.691 -1.27 -0.297073 255 0 0 255 
+142.941 0 -0.807022 255 0 0 255 
+135.581 0 -66.3371 255 0 0 255 
+124.911 0 -41.447 255 0 0 255 
+125.421 -9.91 -59.4771 255 0 0 255 
+85.7909 -11.68 -51.6071 255 0 0 255 
+100.781 -6.1 -30.267 255 0 0 255 
+111.451 -3.56 -18.5871 255 0 0 255 
+-155.829 0 -105.688 255 0 0 255 
+-149.806 -7.62 -103.701 255 0 0 255 
+-142.33 0 -97.8861 255 0 0 255 
+-121.27 0 -88.0264 255 0 0 255 
+-126.647 -13.97 -93.0152 255 0 0 255 
+-55.682 0 -61.1221 255 0 0 255 
+-92.3232 0 -76.2877 255 0 0 255 
+-98 -5.33 -79.7238 255 0 0 255 
+-57.8645 -18.29 -66.8608 255 0 0 255 
+-97.5808 -13.97 -81.9538 255 0 0 255 
+-13.146 0 -48.7491 255 0 0 255 
+-14.648 -22.35 -53.8977 255 0 0 255 
+24.0709 -24.64 -64.8071 255 0 0 255 
+82.2409 -26.67 -66.3371 255 0 0 255 
+138.371 -20.32 -78.2771 255 0 0 255 
+186.158 -11.68 -81.2166 255 0 0 255 
+185.2 0 -77.0929 255 0 0 255 
+220.899 0 -79.2334 255 0 0 255 
+224.718 -14.73 -90.2981 255 0 0 255 
+243.424 0 -77.0948 255 0 0 255 
+251.86 -11.94 -90.2856 255 0 0 255 
+265.535 0 -72.7003 255 0 0 255 
+275.528 -7.87 -83.2222 255 0 0 255 
+283.87 0 -68.0132 255 0 0 255 
+291.213 -9.65 -73.1992 255 0 0 255 
+302.109 0 -69.5868 255 0 0 255 
+298.799 -7.37 -74.661 255 0 0 255 
+-101.583 -22.35 -87.4271 255 0 0 255 
+-86.6068 -32.77 -92.7643 255 0 0 255 
+-54.8287 -29.97 -81.8477 255 0 0 255 
+-17.0994 -32 -72.5196 255 0 0 255 
+24.0709 -35.81 -82.5871 255 0 0 255 
+74.6209 -34.04 -83.8571 255 0 0 255 
+135.071 -28.45 -91.7371 255 0 0 255 
+187.212 -18.29 -88.7372 255 0 0 255 
+-110.201 -31.75 -98.1805 255 0 0 255 
+-100.949 -36.58 -102.346 255 0 0 255 
+-119.391 -27.43 -102.907 255 0 0 255 
+-139.916 -20.83 -114.412 255 0 0 255 
+-158.108 -10.16 -123.431 255 0 0 255 
+-110.68 -30.99 -105.435 255 0 0 255 
+-101.342 -35.81 -112.507 255 0 0 255 
+-162.339 -13.97 -130.052 255 0 0 255 
+-197.49 -7.37 -149.936 255 0 0 255 
+-193.283 -7.37 -153.939 255 0 0 255 
+-158.784 -14.99 -141.428 255 0 0 255 
+-169.935 0 -128.784 255 0 0 255 
+-204.388 0 -149.785 255 0 0 255 
+-203.703 -4.06 -151.676 255 0 0 255 
+-166.443 -5.08 -127.569 255 0 0 255 
+-114.712 -30.73 -110.356 255 0 0 255 
+-124.024 -30.48 -115.833 255 0 0 255 
+-123.842 -30.73 -118.808 255 0 0 255 
+-138.214 -26.42 -119.208 255 0 0 255 
+-136.626 -25.91 -125.288 255 0 0 255 
+-156.248 -16.26 -146.274 255 0 0 255 
+-187.302 -8.38 -157.182 255 0 0 255 
+-133.434 -25.91 -137.698 255 0 0 255 
+-120.252 -34.54 -125.685 255 0 0 255 
+-99.8194 -34.8 -139.458 255 0 0 255 
+-132.58 -27.43 -143.784 255 0 0 255 
+-113.8 -34.8 -121.973 255 0 0 255 
+-109.325 -34.54 -113.734 255 0 0 255 
+-98.7887 -38.61 -127.648 255 0 0 255 
+-184.476 -10.92 -161.164 255 0 0 255 
+-156.383 -18.29 -151.579 255 0 0 255 
+-113.087 -31.75 -141.172 255 0 0 255 
+-134.962 -17.02 -165.628 255 0 0 255 
+-95.8002 -22.35 -166.454 255 0 0 255 
+-153.051 -10.16 -160.931 255 0 0 255 
+-157.031 -17.27 -155.117 255 0 0 255 
+-61.5124 -43.18 -152.391 255 0 0 255 
+-61.8778 -35.05 -162.451 255 0 0 255 
+-94.2744 -40.39 -127.765 255 0 0 255 
+-52.0421 -49.28 -123.469 255 0 0 255 
+-84.9024 -40.13 -111.795 255 0 0 255 
+-80.8243 -36.58 -99.4687 255 0 0 255 
+-50.4567 -42.67 -99.6724 255 0 0 255 
+-18.4438 -46.23 -95.9878 255 0 0 255 
+-10.8055 -51.05 -122.734 255 0 0 255 
+28.6409 -48.01 -114.337 255 0 0 255 
+33.7209 -51.05 -133.137 255 0 0 255 
+76.6509 -46.23 -109.257 255 0 0 255 
+78.6809 -49.02 -132.887 255 0 0 255 
+132.531 -43.94 -115.357 255 0 0 255 
+132.021 -44.7 -142.277 255 0 0 255 
+189.676 -33.02 -109.892 255 0 0 255 
+192.987 -28.45 -134.216 255 0 0 255 
+227.424 -23.37 -105.712 255 0 0 255 
+234.832 -21.84 -129.226 255 0 0 255 
+256.038 -13.97 -102.08 255 0 0 255 
+262.305 -14.22 -116.033 255 0 0 255 
+275.432 -9.91 -94.4293 255 0 0 255 
+279.807 -10.67 -106.572 255 0 0 255 
+295.199 -18.29 -79.8126 255 0 0 255 
+-20.5883 -41.15 -154.358 255 0 0 255 
+35.2509 -37.59 -167.177 255 0 0 255 
+73.0909 -38.1 -165.137 255 0 0 255 
+121.351 -30.99 -167.677 255 0 0 255 
+193.14 -17.27 -155.554 255 0 0 255 
+243.877 -9.65 -144.922 255 0 0 255 
+267.513 -7.11 -127.824 255 0 0 255 
+295.087 -5.59 -106.996 255 0 0 255 
+305.738 -11.94 -95.4139 255 0 0 255 
+-35.8993 -73.66 -157.12 255 0 0 255 
+-37.1344 -71.37 -158.801 255 0 0 255 
+-11.1361 -64.52 -153.047 255 0 0 255 
+11.7804 -77.22 -165.713 255 0 0 255 
+-3.68383 -80.77 -165.948 255 0 0 255 
+-24.8163 -80.01 -161.601 255 0 0 255 
+31.6909 0 -180.377 255 0 0 255 
+-20.6941 0 -170.311 255 0 0 255 
+119.071 0 -178.607 255 0 0 255 
+199.757 0 -157.293 255 0 0 255 
+268.094 0 -132.355 255 0 0 255 
+297.281 0 -107.278 255 0 0 255 
+-91.7303 0 -170.067 255 0 0 255 
+-53.8658 0 -171.081 255 0 0 255 
+-127.72 0 -170.631 255 0 0 255 
+-150.86 0 -163.751 255 0 0 255 
+-182.992 -7.87 -164.915 255 0 0 255 
+-180.358 0 -167.178 255 0 0 255 
+-199.213 -4.57 -166.68 255 0 0 255 
+-202.374 0 -167.949 255 0 0 255 
+342.92 -63.25 -47.1378 255 0 0 255 
+330.172 -73.15 -73.6594 255 0 0 255 
+349.473 -86.61 -39.3583 255 0 0 255 
+309.174 -16.51 -73.0276 255 0 0 255 
+321.927 -9.65 -61.7793 255 0 0 255 
+314.496 0 -66.6421 255 0 0 255 
+328.67 -5.84 -52.3222 255 0 0 255 
+323.395 0 -60.1321 255 0 0 255 
+297.777 -24.13 -81.4629 255 0 0 255 
+-203.597 0 -157.16 255 0 0 255 
+-203.182 -3.81 -157.585 255 0 0 255 
+-203.311 -4.83 -162.977 255 0 0 255 
+-205.392 0 -163.02 255 0 0 255 
+-24.7063 -78.23 -163.487 255 0 0 255 
+-3.58835 -79.25 -166.805 255 0 0 255 
+134.311 0 -20.6171 255 0 0 255 
+145.991 0 -8.92708 255 0 0 255 
+74.8709 0 -176.827 255 0 0 255 
+241.924 0 -148.121 255 0 0 255 
+308.539 0 -94.71 255 0 0 255 
+316.986 -52.32 -86.8887 255 0 0 255 
+332.318 -73.15 -75.031 255 0 0 255 
+313.656 -52.32 -84.0655 255 0 0 255 
+335.432 -21.59 -50.4412 255 0 0 255 
+-95.8842 0 -77.4169 255 0 0 255 
+68.0109 6.1 -15.5371 255 0 0 255 
+27.1209 8.13 -49.827 255 0 0 255 
+96.7209 3.56 -1.30702 255 0 0 255 
+126.691 1.27 -0.297073 255 0 0 255 
+125.421 9.91 -59.4771 255 0 0 255 
+100.781 6.1 -30.267 255 0 0 255 
+85.7909 11.68 -51.6071 255 0 0 255 
+111.451 3.56 -18.5871 255 0 0 255 
+-149.806 7.62 -103.701 255 0 0 255 
+-126.647 13.97 -93.0152 255 0 0 255 
+-98 5.33 -79.7238 255 0 0 255 
+-97.5808 13.97 -81.9538 255 0 0 255 
+-57.8645 18.29 -66.8608 255 0 0 255 
+-14.648 22.35 -53.8977 255 0 0 255 
+24.0709 24.64 -64.8071 255 0 0 255 
+82.2409 26.67 -66.3371 255 0 0 255 
+138.371 20.32 -78.2771 255 0 0 255 
+186.158 11.68 -81.2166 255 0 0 255 
+224.718 14.73 -90.2981 255 0 0 255 
+251.86 11.94 -90.2856 255 0 0 255 
+275.528 7.87 -83.2222 255 0 0 255 
+291.213 9.65 -73.1992 255 0 0 255 
+298.799 7.37 -74.661 255 0 0 255 
+-101.583 22.35 -87.4271 255 0 0 255 
+-86.6068 32.77 -92.7643 255 0 0 255 
+-54.8287 29.97 -81.8477 255 0 0 255 
+-17.0994 32 -72.5196 255 0 0 255 
+24.0709 35.81 -82.5871 255 0 0 255 
+74.6209 34.04 -83.8571 255 0 0 255 
+135.071 28.45 -91.7371 255 0 0 255 
+187.212 18.29 -88.7372 255 0 0 255 
+-100.949 36.58 -102.346 255 0 0 255 
+-110.201 31.75 -98.1805 255 0 0 255 
+-119.391 27.43 -102.907 255 0 0 255 
+-139.916 20.83 -114.412 255 0 0 255 
+-158.108 10.16 -123.431 255 0 0 255 
+-101.342 35.81 -112.507 255 0 0 255 
+-110.68 30.99 -105.435 255 0 0 255 
+-162.339 13.97 -130.052 255 0 0 255 
+-193.283 7.37 -153.939 255 0 0 255 
+-197.49 7.37 -149.936 255 0 0 255 
+-158.784 14.99 -141.428 255 0 0 255 
+-166.443 5.08 -127.569 255 0 0 255 
+-203.703 4.06 -151.676 255 0 0 255 
+-114.712 30.73 -110.356 255 0 0 255 
+-123.842 30.73 -118.808 255 0 0 255 
+-124.024 30.48 -115.833 255 0 0 255 
+-138.214 26.42 -119.208 255 0 0 255 
+-136.626 25.91 -125.288 255 0 0 255 
+-156.248 16.26 -146.274 255 0 0 255 
+-187.302 8.38 -157.182 255 0 0 255 
+-133.434 25.91 -137.698 255 0 0 255 
+-120.252 34.54 -125.685 255 0 0 255 
+-99.8194 34.8 -139.458 255 0 0 255 
+-132.58 27.43 -143.784 255 0 0 255 
+-113.8 34.8 -121.973 255 0 0 255 
+-109.325 34.54 -113.734 255 0 0 255 
+-98.7887 38.61 -127.648 255 0 0 255 
+-184.476 10.92 -161.164 255 0 0 255 
+-156.383 18.29 -151.579 255 0 0 255 
+-134.962 17.02 -165.628 255 0 0 255 
+-113.087 31.75 -141.172 255 0 0 255 
+-95.8002 22.35 -166.454 255 0 0 255 
+-153.051 10.16 -160.931 255 0 0 255 
+-157.031 17.27 -155.117 255 0 0 255 
+-61.5124 43.18 -152.391 255 0 0 255 
+-61.8778 35.05 -162.451 255 0 0 255 
+-94.2744 40.39 -127.765 255 0 0 255 
+-52.0421 49.28 -123.469 255 0 0 255 
+-84.9024 40.13 -111.795 255 0 0 255 
+-80.8243 36.58 -99.4687 255 0 0 255 
+-50.4567 42.67 -99.6724 255 0 0 255 
+-18.4438 46.23 -95.9878 255 0 0 255 
+-10.8055 51.05 -122.734 255 0 0 255 
+28.6409 48.01 -114.337 255 0 0 255 
+33.7209 51.05 -133.137 255 0 0 255 
+76.6509 46.23 -109.257 255 0 0 255 
+78.6809 49.02 -132.887 255 0 0 255 
+132.531 43.94 -115.357 255 0 0 255 
+132.021 44.7 -142.277 255 0 0 255 
+189.676 33.02 -109.892 255 0 0 255 
+192.987 28.45 -134.216 255 0 0 255 
+227.424 23.37 -105.712 255 0 0 255 
+234.832 21.84 -129.226 255 0 0 255 
+256.038 13.97 -102.08 255 0 0 255 
+262.305 14.22 -116.033 255 0 0 255 
+275.432 9.91 -94.4293 255 0 0 255 
+279.807 10.67 -106.572 255 0 0 255 
+295.199 18.29 -79.8126 255 0 0 255 
+-20.5883 41.15 -154.358 255 0 0 255 
+35.2509 37.59 -167.177 255 0 0 255 
+73.0909 38.1 -165.137 255 0 0 255 
+121.351 30.99 -167.677 255 0 0 255 
+193.14 17.27 -155.554 255 0 0 255 
+243.877 9.65 -144.922 255 0 0 255 
+267.513 7.11 -127.824 255 0 0 255 
+295.087 5.59 -106.996 255 0 0 255 
+305.738 11.94 -95.4139 255 0 0 255 
+-35.8993 73.66 -157.12 255 0 0 255 
+-37.1344 71.37 -158.801 255 0 0 255 
+-11.1361 64.52 -153.047 255 0 0 255 
+11.7804 77.22 -165.713 255 0 0 255 
+-24.8163 80.01 -161.601 255 0 0 255 
+-3.68383 80.77 -165.948 255 0 0 255 
+-182.992 7.87 -164.915 255 0 0 255 
+-199.213 4.57 -166.68 255 0 0 255 
+349.473 86.61 -39.3583 255 0 0 255 
+330.172 73.15 -73.6594 255 0 0 255 
+342.92 63.25 -47.1378 255 0 0 255 
+309.174 16.51 -73.0276 255 0 0 255 
+321.927 9.65 -61.7793 255 0 0 255 
+328.67 5.84 -52.3222 255 0 0 255 
+297.777 24.13 -81.4629 255 0 0 255 
+-203.182 3.81 -157.585 255 0 0 255 
+-203.311 4.83 -162.977 255 0 0 255 
+-3.58835 79.25 -166.805 255 0 0 255 
+-24.7063 78.23 -163.487 255 0 0 255 
+332.318 73.15 -75.031 255 0 0 255 
+316.986 52.32 -86.8887 255 0 0 255 
+313.656 52.32 -84.0655 255 0 0 255 
+335.432 21.59 -50.4412 255 0 0 255 
+3 0 1 2 
+3 2 3 0 
+3 4 0 3 
+3 3 5 4 
+3 6 4 5 
+3 5 7 6 
+3 8 6 7 
+3 9 10 11 
+3 3 2 12 
+3 12 13 3 
+3 5 3 13 
+3 13 14 5 
+3 7 5 14 
+3 15 16 17 
+3 18 17 16 
+3 16 19 18 
+3 20 21 22 
+3 22 23 20 
+3 23 22 24 
+3 25 20 23 
+3 23 26 25 
+3 1 25 26 
+3 26 2 1 
+3 27 2 26 
+3 12 2 27 
+3 27 28 12 
+3 11 12 28 
+3 28 29 11 
+3 9 11 29 
+3 9 29 30 
+3 30 31 9 
+3 32 31 30 
+3 30 33 32 
+3 34 32 33 
+3 33 35 34 
+3 36 34 35 
+3 35 37 36 
+3 38 36 37 
+3 37 39 38 
+3 40 38 39 
+3 39 41 40 
+3 24 19 42 
+3 24 42 43 
+3 24 43 44 
+3 44 23 24 
+3 26 23 44 
+3 44 45 26 
+3 27 26 45 
+3 45 46 27 
+3 28 27 46 
+3 46 47 28 
+3 29 28 47 
+3 47 48 29 
+3 30 29 48 
+3 48 49 30 
+3 33 30 49 
+3 50 51 43 
+3 43 42 50 
+3 52 50 42 
+3 42 19 52 
+3 53 52 19 
+3 19 16 53 
+3 54 53 16 
+3 55 56 51 
+3 51 50 55 
+3 52 55 50 
+3 54 57 53 
+3 58 59 60 
+3 60 57 58 
+3 61 62 63 
+3 63 64 61 
+3 64 54 16 
+3 16 15 64 
+3 61 64 15 
+3 65 52 66 
+3 66 67 65 
+3 52 53 68 
+3 68 66 52 
+3 67 66 68 
+3 68 69 67 
+3 69 68 57 
+3 57 60 69 
+3 70 60 59 
+3 59 71 70 
+3 69 60 70 
+3 70 72 69 
+3 73 67 69 
+3 74 73 72 
+3 72 75 74 
+3 57 54 64 
+3 65 67 76 
+3 77 65 76 
+3 56 77 76 
+3 78 56 76 
+3 73 78 76 
+3 67 73 76 
+3 71 79 80 
+3 80 70 71 
+3 70 80 75 
+3 75 72 70 
+3 81 75 82 
+3 82 74 81 
+3 74 82 83 
+3 84 82 75 
+3 75 85 84 
+3 86 74 83 
+3 83 87 86 
+3 88 74 86 
+3 86 89 88 
+3 88 78 74 
+3 56 78 88 
+3 88 90 56 
+3 43 51 56 
+3 56 91 43 
+3 91 56 90 
+3 92 90 88 
+3 88 89 92 
+3 93 92 89 
+3 89 94 93 
+3 95 93 94 
+3 94 96 95 
+3 97 95 96 
+3 96 98 97 
+3 99 97 98 
+3 98 100 99 
+3 101 99 100 
+3 100 102 101 
+3 103 101 102 
+3 102 104 103 
+3 105 103 104 
+3 104 106 105 
+3 107 105 106 
+3 106 108 107 
+3 91 90 92 
+3 44 91 92 
+3 43 91 44 
+3 45 44 92 
+3 92 93 45 
+3 46 45 93 
+3 93 95 46 
+3 47 46 95 
+3 95 97 47 
+3 48 47 97 
+3 97 99 48 
+3 49 48 99 
+3 99 101 49 
+3 33 49 101 
+3 101 103 33 
+3 35 33 103 
+3 103 105 35 
+3 37 35 105 
+3 105 107 37 
+3 39 37 107 
+3 107 109 39 
+3 41 39 109 
+3 94 89 86 
+3 86 110 94 
+3 96 94 110 
+3 110 111 96 
+3 98 96 111 
+3 111 112 98 
+3 100 98 112 
+3 112 113 100 
+3 102 100 113 
+3 113 114 102 
+3 104 102 114 
+3 114 115 104 
+3 106 104 115 
+3 115 116 106 
+3 108 106 116 
+3 116 117 108 
+3 118 108 117 
+3 119 86 87 
+3 87 120 119 
+3 110 86 119 
+3 119 121 110 
+3 122 121 119 
+3 119 123 122 
+3 123 119 124 
+3 125 111 110 
+3 110 126 125 
+3 114 113 127 
+3 127 128 114 
+3 117 116 129 
+3 129 130 117 
+3 87 83 131 
+3 131 132 87 
+3 110 87 132 
+3 132 126 110 
+3 83 82 133 
+3 133 131 83 
+3 82 84 134 
+3 134 133 82 
+3 84 135 136 
+3 136 134 84 
+3 84 85 135 
+3 137 138 136 
+3 136 135 137 
+3 139 140 141 
+3 41 142 143 
+3 143 144 41 
+3 144 143 145 
+3 145 146 144 
+3 147 109 107 
+3 107 108 147 
+3 118 147 108 
+3 58 57 64 
+3 64 63 58 
+3 148 149 63 
+3 63 62 148 
+3 58 63 149 
+3 149 59 58 
+3 75 80 85 
+3 79 135 85 
+3 85 80 79 
+3 135 79 137 
+3 150 137 79 
+3 79 71 150 
+3 149 150 71 
+3 71 59 149 
+3 138 137 150 
+3 150 151 138 
+3 149 148 151 
+3 151 150 149 
+3 55 52 65 
+3 77 56 55 
+3 74 78 73 
+3 57 68 53 
+3 65 77 55 
+3 152 153 123 
+3 123 124 152 
+3 124 119 120 
+3 120 152 124 
+3 122 123 153 
+3 121 120 87 
+3 87 110 121 
+3 122 153 152 
+3 152 121 122 
+3 121 152 120 
+3 10 13 12 
+3 12 11 10 
+3 10 154 14 
+3 14 13 10 
+3 154 155 8 
+3 8 14 154 
+3 14 8 7 
+3 113 112 156 
+3 156 127 113 
+3 156 112 111 
+3 111 125 156 
+3 129 116 115 
+3 115 157 129 
+3 128 157 115 
+3 115 114 128 
+3 117 130 158 
+3 158 118 117 
+3 159 160 140 
+3 140 161 159 
+3 161 147 118 
+3 118 159 161 
+3 141 140 160 
+3 41 144 40 
+3 118 158 146 
+3 146 145 162 
+3 162 118 146 
+3 118 162 159 
+3 162 139 160 
+3 160 159 162 
+3 160 139 141 
+3 140 139 162 
+3 162 161 140 
+3 162 145 143 
+3 143 161 162 
+3 161 143 142 
+3 161 142 147 
+3 142 41 109 
+3 109 147 142 
+3 21 163 22 
+3 19 22 163 
+3 163 18 19 
+3 19 24 22 
+3 1 0 164 
+3 164 165 1 
+3 0 4 166 
+3 166 164 0 
+3 4 6 167 
+3 167 166 4 
+3 167 6 8 
+3 168 10 9 
+3 165 164 169 
+3 169 170 165 
+3 164 166 171 
+3 171 169 164 
+3 171 166 167 
+3 17 172 15 
+3 17 18 173 
+3 173 172 17 
+3 174 21 20 
+3 20 175 174 
+3 175 20 176 
+3 20 25 177 
+3 177 176 20 
+3 25 1 165 
+3 165 177 25 
+3 177 165 178 
+3 165 170 179 
+3 179 178 165 
+3 170 168 180 
+3 180 179 170 
+3 180 168 9 
+3 180 9 31 
+3 31 181 180 
+3 31 32 182 
+3 182 181 31 
+3 32 34 183 
+3 183 182 32 
+3 34 36 184 
+3 184 183 34 
+3 36 38 185 
+3 185 184 36 
+3 38 40 186 
+3 186 185 38 
+3 187 173 175 
+3 188 187 175 
+3 188 175 176 
+3 176 189 188 
+3 176 177 190 
+3 190 189 176 
+3 177 178 191 
+3 191 190 177 
+3 178 179 192 
+3 192 191 178 
+3 179 180 193 
+3 193 192 179 
+3 180 181 194 
+3 194 193 180 
+3 194 181 182 
+3 195 196 187 
+3 187 188 195 
+3 196 197 173 
+3 173 187 196 
+3 173 197 198 
+3 198 172 173 
+3 172 198 199 
+3 200 201 196 
+3 196 195 200 
+3 196 201 197 
+3 198 202 199 
+3 203 204 202 
+3 202 205 203 
+3 62 61 206 
+3 206 207 62 
+3 199 206 15 
+3 15 172 199 
+3 15 206 61 
+3 197 208 209 
+3 209 210 197 
+3 198 197 210 
+3 210 211 198 
+3 210 209 212 
+3 212 211 210 
+3 211 212 205 
+3 205 202 211 
+3 205 213 214 
+3 214 203 205 
+3 205 212 215 
+3 215 213 205 
+3 212 209 216 
+3 216 217 218 
+3 218 215 216 
+3 206 199 202 
+3 219 209 208 
+3 219 208 220 
+3 219 220 200 
+3 219 200 221 
+3 219 221 216 
+3 219 216 209 
+3 222 214 213 
+3 213 223 222 
+3 223 213 215 
+3 215 218 223 
+3 224 218 225 
+3 225 226 224 
+3 226 225 217 
+3 224 227 228 
+3 228 218 224 
+3 217 229 230 
+3 230 226 217 
+3 217 231 232 
+3 232 229 217 
+3 217 221 231 
+3 221 200 233 
+3 233 231 221 
+3 200 195 188 
+3 188 233 200 
+3 233 188 234 
+3 233 235 232 
+3 232 231 233 
+3 235 236 237 
+3 237 232 235 
+3 236 238 239 
+3 239 237 236 
+3 238 240 241 
+3 241 239 238 
+3 240 242 243 
+3 243 241 240 
+3 242 244 245 
+3 245 243 242 
+3 244 246 247 
+3 247 245 244 
+3 246 248 249 
+3 249 247 246 
+3 248 250 251 
+3 251 249 248 
+3 235 233 234 
+3 235 234 189 
+3 189 234 188 
+3 189 190 236 
+3 236 235 189 
+3 190 191 238 
+3 238 236 190 
+3 191 192 240 
+3 240 238 191 
+3 192 193 242 
+3 242 240 192 
+3 193 194 244 
+3 244 242 193 
+3 194 182 246 
+3 246 244 194 
+3 182 183 248 
+3 248 246 182 
+3 183 184 250 
+3 250 248 183 
+3 184 185 252 
+3 252 250 184 
+3 252 185 186 
+3 232 237 253 
+3 253 229 232 
+3 237 239 254 
+3 254 253 237 
+3 239 241 255 
+3 255 254 239 
+3 241 243 256 
+3 256 255 241 
+3 243 245 257 
+3 257 256 243 
+3 245 247 258 
+3 258 257 245 
+3 247 249 259 
+3 259 258 247 
+3 249 251 260 
+3 260 259 249 
+3 260 251 261 
+3 229 262 263 
+3 263 230 229 
+3 229 253 264 
+3 264 262 229 
+3 262 264 265 
+3 265 266 262 
+3 266 265 267 
+3 254 125 126 
+3 126 253 254 
+3 256 257 128 
+3 128 127 256 
+3 259 260 130 
+3 130 129 259 
+3 226 230 132 
+3 132 131 226 
+3 230 253 126 
+3 126 132 230 
+3 224 226 131 
+3 131 133 224 
+3 227 224 133 
+3 133 134 227 
+3 268 227 134 
+3 134 136 268 
+3 268 228 227 
+3 138 269 268 
+3 268 136 138 
+3 270 271 272 
+3 273 186 144 
+3 144 274 273 
+3 274 144 146 
+3 146 275 274 
+3 252 276 251 
+3 251 250 252 
+3 251 276 261 
+3 202 204 207 
+3 207 206 202 
+3 277 148 62 
+3 62 207 277 
+3 207 204 203 
+3 203 277 207 
+3 228 223 218 
+3 268 222 223 
+3 223 228 268 
+3 269 222 268 
+3 269 278 214 
+3 214 222 269 
+3 278 277 203 
+3 203 214 278 
+3 269 138 151 
+3 151 278 269 
+3 148 277 278 
+3 278 151 148 
+3 208 197 201 
+3 201 200 220 
+3 216 221 217 
+3 198 211 202 
+3 201 220 208 
+3 279 280 266 
+3 266 267 279 
+3 262 266 280 
+3 280 263 262 
+3 279 267 265 
+3 263 264 253 
+3 253 230 263 
+3 280 279 265 
+3 265 263 280 
+3 263 265 264 
+3 169 10 168 
+3 168 170 169 
+3 154 10 169 
+3 169 171 154 
+3 154 167 8 
+3 167 154 171 
+3 255 256 127 
+3 127 156 255 
+3 255 156 125 
+3 125 254 255 
+3 259 129 157 
+3 157 258 259 
+3 157 128 257 
+3 257 258 157 
+3 130 260 261 
+3 261 158 130 
+3 281 282 283 
+3 283 271 281 
+3 276 283 282 
+3 282 261 276 
+3 281 271 270 
+3 40 144 186 
+3 146 158 261 
+3 284 275 146 
+3 146 282 284 
+3 282 146 261 
+3 272 284 282 
+3 282 281 272 
+3 270 272 281 
+3 272 271 283 
+3 283 284 272 
+3 275 284 283 
+3 283 274 275 
+3 273 274 283 
+3 276 273 283 
+3 186 273 276 
+3 276 252 186 
+3 174 163 21 
+3 174 173 18 
+3 18 163 174 
+3 174 175 173 
+3 216 215 212 
+3 69 72 73 
+3 285 286 287 
+3 287 288 285 
+3 289 285 288 
+3 288 290 289 
+3 291 289 290 
+3 290 292 291 
+3 293 291 292 
+3 294 295 296 
+3 288 287 297 
+3 297 298 288 
+3 290 288 298 
+3 298 299 290 
+3 292 290 299 
+3 300 301 302 
+3 303 302 301 
+3 301 304 303 
+3 305 306 307 
+3 307 308 305 
+3 308 307 309 
+3 310 305 308 
+3 308 311 310 
+3 286 310 311 
+3 311 287 286 
+3 312 287 311 
+3 297 287 312 
+3 312 313 297 
+3 296 297 313 
+3 313 314 296 
+3 294 296 314 
+3 294 314 315 
+3 315 316 294 
+3 317 316 315 
+3 315 318 317 
+3 319 317 318 
+3 318 320 319 
+3 321 319 320 
+3 320 322 321 
+3 323 321 322 
+3 322 324 323 
+3 325 323 324 
+3 324 326 325 
+3 309 304 327 
+3 309 327 328 
+3 309 328 329 
+3 329 308 309 
+3 311 308 329 
+3 329 330 311 
+3 312 311 330 
+3 330 331 312 
+3 313 312 331 
+3 331 332 313 
+3 314 313 332 
+3 332 333 314 
+3 315 314 333 
+3 333 334 315 
+3 318 315 334 
+3 335 336 328 
+3 328 327 335 
+3 337 335 327 
+3 327 304 337 
+3 338 337 304 
+3 304 301 338 
+3 339 338 301 
+3 340 341 336 
+3 336 335 340 
+3 337 340 335 
+3 339 342 338 
+3 343 344 345 
+3 345 342 343 
+3 346 347 348 
+3 348 349 346 
+3 349 339 301 
+3 301 300 349 
+3 346 349 300 
+3 350 337 351 
+3 351 352 350 
+3 337 338 353 
+3 353 351 337 
+3 352 351 353 
+3 353 354 352 
+3 354 353 342 
+3 342 345 354 
+3 355 345 344 
+3 344 356 355 
+3 354 345 355 
+3 355 357 354 
+3 358 352 354 
+3 359 358 357 
+3 357 360 359 
+3 342 339 349 
+3 350 352 361 
+3 362 350 361 
+3 341 362 361 
+3 363 341 361 
+3 358 363 361 
+3 352 358 361 
+3 356 364 365 
+3 365 355 356 
+3 355 365 360 
+3 360 357 355 
+3 366 360 367 
+3 367 359 366 
+3 359 367 368 
+3 369 367 360 
+3 360 370 369 
+3 371 359 368 
+3 368 372 371 
+3 373 359 371 
+3 371 374 373 
+3 373 363 359 
+3 341 363 373 
+3 373 375 341 
+3 328 336 341 
+3 341 376 328 
+3 376 341 375 
+3 377 375 373 
+3 373 374 377 
+3 378 377 374 
+3 374 379 378 
+3 380 378 379 
+3 379 381 380 
+3 382 380 381 
+3 381 383 382 
+3 384 382 383 
+3 383 385 384 
+3 386 384 385 
+3 385 387 386 
+3 388 386 387 
+3 387 389 388 
+3 390 388 389 
+3 389 391 390 
+3 392 390 391 
+3 391 393 392 
+3 376 375 377 
+3 329 376 377 
+3 328 376 329 
+3 330 329 377 
+3 377 378 330 
+3 331 330 378 
+3 378 380 331 
+3 332 331 380 
+3 380 382 332 
+3 333 332 382 
+3 382 384 333 
+3 334 333 384 
+3 384 386 334 
+3 318 334 386 
+3 386 388 318 
+3 320 318 388 
+3 388 390 320 
+3 322 320 390 
+3 390 392 322 
+3 324 322 392 
+3 392 394 324 
+3 326 324 394 
+3 379 374 371 
+3 371 395 379 
+3 381 379 395 
+3 395 396 381 
+3 383 381 396 
+3 396 397 383 
+3 385 383 397 
+3 397 398 385 
+3 387 385 398 
+3 398 399 387 
+3 389 387 399 
+3 399 400 389 
+3 391 389 400 
+3 400 401 391 
+3 393 391 401 
+3 401 402 393 
+3 403 393 402 
+3 404 371 372 
+3 372 405 404 
+3 395 371 404 
+3 404 406 395 
+3 407 406 404 
+3 404 408 407 
+3 408 404 409 
+3 410 396 395 
+3 395 411 410 
+3 399 398 412 
+3 412 413 399 
+3 402 401 414 
+3 414 415 402 
+3 372 368 416 
+3 416 417 372 
+3 395 372 417 
+3 417 411 395 
+3 368 367 418 
+3 418 416 368 
+3 367 369 419 
+3 419 418 367 
+3 369 420 421 
+3 421 419 369 
+3 369 370 420 
+3 422 423 421 
+3 421 420 422 
+3 424 425 426 
+3 326 427 428 
+3 428 429 326 
+3 429 428 430 
+3 430 431 429 
+3 432 394 392 
+3 392 393 432 
+3 403 432 393 
+3 343 342 349 
+3 349 348 343 
+3 433 434 348 
+3 348 347 433 
+3 343 348 434 
+3 434 344 343 
+3 360 365 370 
+3 364 420 370 
+3 370 365 364 
+3 420 364 422 
+3 435 422 364 
+3 364 356 435 
+3 434 435 356 
+3 356 344 434 
+3 423 422 435 
+3 435 436 423 
+3 434 433 436 
+3 436 435 434 
+3 340 337 350 
+3 362 341 340 
+3 359 363 358 
+3 342 353 338 
+3 350 362 340 
+3 437 438 408 
+3 408 409 437 
+3 409 404 405 
+3 405 437 409 
+3 407 408 438 
+3 406 405 372 
+3 372 395 406 
+3 407 438 437 
+3 437 406 407 
+3 406 437 405 
+3 295 298 297 
+3 297 296 295 
+3 295 439 299 
+3 299 298 295 
+3 439 440 293 
+3 293 299 439 
+3 299 293 292 
+3 398 397 441 
+3 441 412 398 
+3 441 397 396 
+3 396 410 441 
+3 414 401 400 
+3 400 442 414 
+3 413 442 400 
+3 400 399 413 
+3 402 415 443 
+3 443 403 402 
+3 444 445 425 
+3 425 446 444 
+3 446 432 403 
+3 403 444 446 
+3 426 425 445 
+3 326 429 325 
+3 403 443 431 
+3 431 430 447 
+3 447 403 431 
+3 403 447 444 
+3 447 424 445 
+3 445 444 447 
+3 445 424 426 
+3 425 424 447 
+3 447 446 425 
+3 447 430 428 
+3 428 446 447 
+3 446 428 427 
+3 446 427 432 
+3 427 326 394 
+3 394 432 427 
+3 306 448 307 
+3 304 307 448 
+3 448 303 304 
+3 304 309 307 
+3 286 285 449 
+3 449 450 286 
+3 285 289 451 
+3 451 449 285 
+3 289 291 452 
+3 452 451 289 
+3 452 291 293 
+3 453 295 294 
+3 450 449 454 
+3 454 455 450 
+3 449 451 456 
+3 456 454 449 
+3 456 451 452 
+3 302 457 300 
+3 302 303 458 
+3 458 457 302 
+3 459 306 305 
+3 305 460 459 
+3 460 305 461 
+3 305 310 462 
+3 462 461 305 
+3 310 286 450 
+3 450 462 310 
+3 462 450 463 
+3 450 455 464 
+3 464 463 450 
+3 455 453 465 
+3 465 464 455 
+3 465 453 294 
+3 465 294 316 
+3 316 466 465 
+3 316 317 467 
+3 467 466 316 
+3 317 319 468 
+3 468 467 317 
+3 319 321 469 
+3 469 468 319 
+3 321 323 470 
+3 470 469 321 
+3 323 325 471 
+3 471 470 323 
+3 472 458 460 
+3 473 472 460 
+3 473 460 461 
+3 461 474 473 
+3 461 462 475 
+3 475 474 461 
+3 462 463 476 
+3 476 475 462 
+3 463 464 477 
+3 477 476 463 
+3 464 465 478 
+3 478 477 464 
+3 465 466 479 
+3 479 478 465 
+3 479 466 467 
+3 480 481 472 
+3 472 473 480 
+3 481 482 458 
+3 458 472 481 
+3 458 482 483 
+3 483 457 458 
+3 457 483 484 
+3 485 486 481 
+3 481 480 485 
+3 481 486 482 
+3 483 487 484 
+3 488 489 487 
+3 487 490 488 
+3 347 346 491 
+3 491 492 347 
+3 484 491 300 
+3 300 457 484 
+3 300 491 346 
+3 482 493 494 
+3 494 495 482 
+3 483 482 495 
+3 495 496 483 
+3 495 494 497 
+3 497 496 495 
+3 496 497 490 
+3 490 487 496 
+3 490 498 499 
+3 499 488 490 
+3 490 497 500 
+3 500 498 490 
+3 497 494 501 
+3 501 502 503 
+3 503 500 501 
+3 491 484 487 
+3 504 494 493 
+3 504 493 505 
+3 504 505 485 
+3 504 485 506 
+3 504 506 501 
+3 504 501 494 
+3 507 499 498 
+3 498 508 507 
+3 508 498 500 
+3 500 503 508 
+3 509 503 510 
+3 510 511 509 
+3 511 510 502 
+3 509 512 513 
+3 513 503 509 
+3 502 514 515 
+3 515 511 502 
+3 502 516 517 
+3 517 514 502 
+3 502 506 516 
+3 506 485 518 
+3 518 516 506 
+3 485 480 473 
+3 473 518 485 
+3 518 473 519 
+3 518 520 517 
+3 517 516 518 
+3 520 521 522 
+3 522 517 520 
+3 521 523 524 
+3 524 522 521 
+3 523 525 526 
+3 526 524 523 
+3 525 527 528 
+3 528 526 525 
+3 527 529 530 
+3 530 528 527 
+3 529 531 532 
+3 532 530 529 
+3 531 533 534 
+3 534 532 531 
+3 533 535 536 
+3 536 534 533 
+3 520 518 519 
+3 520 519 474 
+3 474 519 473 
+3 474 475 521 
+3 521 520 474 
+3 475 476 523 
+3 523 521 475 
+3 476 477 525 
+3 525 523 476 
+3 477 478 527 
+3 527 525 477 
+3 478 479 529 
+3 529 527 478 
+3 479 467 531 
+3 531 529 479 
+3 467 468 533 
+3 533 531 467 
+3 468 469 535 
+3 535 533 468 
+3 469 470 537 
+3 537 535 469 
+3 537 470 471 
+3 517 522 538 
+3 538 514 517 
+3 522 524 539 
+3 539 538 522 
+3 524 526 540 
+3 540 539 524 
+3 526 528 541 
+3 541 540 526 
+3 528 530 542 
+3 542 541 528 
+3 530 532 543 
+3 543 542 530 
+3 532 534 544 
+3 544 543 532 
+3 534 536 545 
+3 545 544 534 
+3 545 536 546 
+3 514 547 548 
+3 548 515 514 
+3 514 538 549 
+3 549 547 514 
+3 547 549 550 
+3 550 551 547 
+3 551 550 552 
+3 539 410 411 
+3 411 538 539 
+3 541 542 413 
+3 413 412 541 
+3 544 545 415 
+3 415 414 544 
+3 511 515 417 
+3 417 416 511 
+3 515 538 411 
+3 411 417 515 
+3 509 511 416 
+3 416 418 509 
+3 512 509 418 
+3 418 419 512 
+3 553 512 419 
+3 419 421 553 
+3 553 513 512 
+3 423 554 553 
+3 553 421 423 
+3 555 556 557 
+3 558 471 429 
+3 429 559 558 
+3 559 429 431 
+3 431 560 559 
+3 537 561 536 
+3 536 535 537 
+3 536 561 546 
+3 487 489 492 
+3 492 491 487 
+3 562 433 347 
+3 347 492 562 
+3 492 489 488 
+3 488 562 492 
+3 513 508 503 
+3 553 507 508 
+3 508 513 553 
+3 554 507 553 
+3 554 563 499 
+3 499 507 554 
+3 563 562 488 
+3 488 499 563 
+3 554 423 436 
+3 436 563 554 
+3 433 562 563 
+3 563 436 433 
+3 493 482 486 
+3 486 485 505 
+3 501 506 502 
+3 483 496 487 
+3 486 505 493 
+3 564 565 551 
+3 551 552 564 
+3 547 551 565 
+3 565 548 547 
+3 564 552 550 
+3 548 549 538 
+3 538 515 548 
+3 565 564 550 
+3 550 548 565 
+3 548 550 549 
+3 454 295 453 
+3 453 455 454 
+3 439 295 454 
+3 454 456 439 
+3 439 452 293 
+3 452 439 456 
+3 540 541 412 
+3 412 441 540 
+3 540 441 410 
+3 410 539 540 
+3 544 414 442 
+3 442 543 544 
+3 442 413 542 
+3 542 543 442 
+3 415 545 546 
+3 546 443 415 
+3 566 567 568 
+3 568 556 566 
+3 561 568 567 
+3 567 546 561 
+3 566 556 555 
+3 325 429 471 
+3 431 443 546 
+3 569 560 431 
+3 431 567 569 
+3 567 431 546 
+3 557 569 567 
+3 567 566 557 
+3 555 557 566 
+3 557 556 568 
+3 568 569 557 
+3 560 569 568 
+3 568 559 560 
+3 558 559 568 
+3 561 558 568 
+3 471 558 561 
+3 561 537 471 
+3 459 448 306 
+3 459 458 303 
+3 303 448 459 
+3 459 460 458 
+3 501 500 497 
+3 354 357 358 
+3 570 571 572 
+3 572 573 570 
+3 574 570 573 
+3 573 575 574 
+3 576 574 575 
+3 575 577 576 
+3 578 576 577 
+3 579 580 581 
+3 573 572 582 
+3 582 583 573 
+3 575 573 583 
+3 583 584 575 
+3 577 575 584 
+3 585 586 587 
+3 588 587 586 
+3 586 589 588 
+3 590 591 592 
+3 592 593 590 
+3 593 592 594 
+3 595 590 593 
+3 593 596 595 
+3 571 595 596 
+3 596 572 571 
+3 597 572 596 
+3 582 572 597 
+3 597 598 582 
+3 581 582 598 
+3 598 599 581 
+3 579 581 599 
+3 579 599 600 
+3 600 601 579 
+3 602 601 600 
+3 600 603 602 
+3 604 602 603 
+3 603 605 604 
+3 606 604 605 
+3 605 607 606 
+3 608 606 607 
+3 607 609 608 
+3 610 608 609 
+3 609 611 610 
+3 594 589 612 
+3 594 612 613 
+3 594 613 614 
+3 614 593 594 
+3 596 593 614 
+3 614 615 596 
+3 597 596 615 
+3 615 616 597 
+3 598 597 616 
+3 616 617 598 
+3 599 598 617 
+3 617 618 599 
+3 600 599 618 
+3 618 619 600 
+3 603 600 619 
+3 620 621 613 
+3 613 612 620 
+3 622 620 612 
+3 612 589 622 
+3 623 622 589 
+3 589 586 623 
+3 624 623 586 
+3 625 626 621 
+3 621 620 625 
+3 622 625 620 
+3 624 627 623 
+3 628 629 630 
+3 630 627 628 
+3 631 632 633 
+3 633 634 631 
+3 634 624 586 
+3 586 585 634 
+3 631 634 585 
+3 635 622 636 
+3 636 637 635 
+3 622 623 638 
+3 638 636 622 
+3 637 636 638 
+3 638 639 637 
+3 639 638 627 
+3 627 630 639 
+3 640 630 629 
+3 629 641 640 
+3 639 630 640 
+3 640 642 639 
+3 643 637 639 
+3 644 643 642 
+3 642 645 644 
+3 627 624 634 
+3 635 637 646 
+3 647 635 646 
+3 626 647 646 
+3 648 626 646 
+3 643 648 646 
+3 637 643 646 
+3 641 649 650 
+3 650 640 641 
+3 640 650 645 
+3 645 642 640 
+3 651 645 652 
+3 652 644 651 
+3 644 652 653 
+3 654 652 645 
+3 645 655 654 
+3 656 644 653 
+3 653 657 656 
+3 658 644 656 
+3 656 659 658 
+3 658 648 644 
+3 626 648 658 
+3 658 660 626 
+3 613 621 626 
+3 626 661 613 
+3 661 626 660 
+3 662 660 658 
+3 658 659 662 
+3 663 662 659 
+3 659 664 663 
+3 665 663 664 
+3 664 666 665 
+3 667 665 666 
+3 666 668 667 
+3 669 667 668 
+3 668 670 669 
+3 671 669 670 
+3 670 672 671 
+3 673 671 672 
+3 672 674 673 
+3 675 673 674 
+3 674 676 675 
+3 677 675 676 
+3 676 678 677 
+3 661 660 662 
+3 614 661 662 
+3 613 661 614 
+3 615 614 662 
+3 662 663 615 
+3 616 615 663 
+3 663 665 616 
+3 617 616 665 
+3 665 667 617 
+3 618 617 667 
+3 667 669 618 
+3 619 618 669 
+3 669 671 619 
+3 603 619 671 
+3 671 673 603 
+3 605 603 673 
+3 673 675 605 
+3 607 605 675 
+3 675 677 607 
+3 609 607 677 
+3 677 679 609 
+3 611 609 679 
+3 664 659 656 
+3 656 680 664 
+3 666 664 680 
+3 680 681 666 
+3 668 666 681 
+3 681 682 668 
+3 670 668 682 
+3 682 683 670 
+3 672 670 683 
+3 683 684 672 
+3 674 672 684 
+3 684 685 674 
+3 676 674 685 
+3 685 686 676 
+3 678 676 686 
+3 686 687 678 
+3 688 678 687 
+3 689 656 657 
+3 657 690 689 
+3 680 656 689 
+3 689 691 680 
+3 692 691 689 
+3 689 693 692 
+3 693 689 694 
+3 695 681 680 
+3 680 696 695 
+3 684 683 697 
+3 697 698 684 
+3 687 686 699 
+3 699 700 687 
+3 657 653 701 
+3 701 702 657 
+3 680 657 702 
+3 702 696 680 
+3 653 652 703 
+3 703 701 653 
+3 652 654 704 
+3 704 703 652 
+3 654 705 706 
+3 706 704 654 
+3 654 655 705 
+3 707 708 706 
+3 706 705 707 
+3 709 710 711 
+3 611 712 713 
+3 713 714 611 
+3 714 713 715 
+3 715 716 714 
+3 717 679 677 
+3 677 678 717 
+3 688 717 678 
+3 628 627 634 
+3 634 633 628 
+3 718 719 633 
+3 633 632 718 
+3 628 633 719 
+3 719 629 628 
+3 645 650 655 
+3 649 705 655 
+3 655 650 649 
+3 705 649 707 
+3 720 707 649 
+3 649 641 720 
+3 719 720 641 
+3 641 629 719 
+3 708 707 720 
+3 720 721 708 
+3 719 718 721 
+3 721 720 719 
+3 625 622 635 
+3 647 626 625 
+3 644 648 643 
+3 627 638 623 
+3 635 647 625 
+3 722 723 693 
+3 693 694 722 
+3 694 689 690 
+3 690 722 694 
+3 692 693 723 
+3 691 690 657 
+3 657 680 691 
+3 692 723 722 
+3 722 691 692 
+3 691 722 690 
+3 580 583 582 
+3 582 581 580 
+3 580 724 584 
+3 584 583 580 
+3 724 725 578 
+3 578 584 724 
+3 584 578 577 
+3 683 682 726 
+3 726 697 683 
+3 726 682 681 
+3 681 695 726 
+3 699 686 685 
+3 685 727 699 
+3 698 727 685 
+3 685 684 698 
+3 687 700 728 
+3 728 688 687 
+3 729 730 710 
+3 710 731 729 
+3 731 717 688 
+3 688 729 731 
+3 711 710 730 
+3 611 714 610 
+3 688 728 716 
+3 716 715 732 
+3 732 688 716 
+3 688 732 729 
+3 732 709 730 
+3 730 729 732 
+3 730 709 711 
+3 710 709 732 
+3 732 731 710 
+3 732 715 713 
+3 713 731 732 
+3 731 713 712 
+3 731 712 717 
+3 712 611 679 
+3 679 717 712 
+3 591 733 592 
+3 589 592 733 
+3 733 588 589 
+3 589 594 592 
+3 571 570 734 
+3 734 735 571 
+3 570 574 736 
+3 736 734 570 
+3 574 576 737 
+3 737 736 574 
+3 737 576 578 
+3 738 580 579 
+3 735 734 739 
+3 739 740 735 
+3 734 736 741 
+3 741 739 734 
+3 741 736 737 
+3 587 742 585 
+3 587 588 743 
+3 743 742 587 
+3 744 591 590 
+3 590 745 744 
+3 745 590 746 
+3 590 595 747 
+3 747 746 590 
+3 595 571 735 
+3 735 747 595 
+3 747 735 748 
+3 735 740 749 
+3 749 748 735 
+3 740 738 750 
+3 750 749 740 
+3 750 738 579 
+3 750 579 601 
+3 601 751 750 
+3 601 602 752 
+3 752 751 601 
+3 602 604 753 
+3 753 752 602 
+3 604 606 754 
+3 754 753 604 
+3 606 608 755 
+3 755 754 606 
+3 608 610 756 
+3 756 755 608 
+3 757 743 745 
+3 758 757 745 
+3 758 745 746 
+3 746 759 758 
+3 746 747 760 
+3 760 759 746 
+3 747 748 761 
+3 761 760 747 
+3 748 749 762 
+3 762 761 748 
+3 749 750 763 
+3 763 762 749 
+3 750 751 764 
+3 764 763 750 
+3 764 751 752 
+3 765 766 757 
+3 757 758 765 
+3 766 767 743 
+3 743 757 766 
+3 743 767 768 
+3 768 742 743 
+3 742 768 769 
+3 770 771 766 
+3 766 765 770 
+3 766 771 767 
+3 768 772 769 
+3 773 774 772 
+3 772 775 773 
+3 632 631 776 
+3 776 777 632 
+3 769 776 585 
+3 585 742 769 
+3 585 776 631 
+3 767 778 779 
+3 779 780 767 
+3 768 767 780 
+3 780 781 768 
+3 780 779 782 
+3 782 781 780 
+3 781 782 775 
+3 775 772 781 
+3 775 783 784 
+3 784 773 775 
+3 775 782 785 
+3 785 783 775 
+3 782 779 786 
+3 786 787 788 
+3 788 785 786 
+3 776 769 772 
+3 789 779 778 
+3 789 778 790 
+3 789 790 770 
+3 789 770 791 
+3 789 791 786 
+3 789 786 779 
+3 792 784 783 
+3 783 793 792 
+3 793 783 785 
+3 785 788 793 
+3 794 788 795 
+3 795 796 794 
+3 796 795 787 
+3 794 797 798 
+3 798 788 794 
+3 787 799 800 
+3 800 796 787 
+3 787 801 802 
+3 802 799 787 
+3 787 791 801 
+3 791 770 803 
+3 803 801 791 
+3 770 765 758 
+3 758 803 770 
+3 803 758 804 
+3 803 805 802 
+3 802 801 803 
+3 805 806 807 
+3 807 802 805 
+3 806 808 809 
+3 809 807 806 
+3 808 810 811 
+3 811 809 808 
+3 810 812 813 
+3 813 811 810 
+3 812 814 815 
+3 815 813 812 
+3 814 816 817 
+3 817 815 814 
+3 816 818 819 
+3 819 817 816 
+3 818 820 821 
+3 821 819 818 
+3 805 803 804 
+3 805 804 759 
+3 759 804 758 
+3 759 760 806 
+3 806 805 759 
+3 760 761 808 
+3 808 806 760 
+3 761 762 810 
+3 810 808 761 
+3 762 763 812 
+3 812 810 762 
+3 763 764 814 
+3 814 812 763 
+3 764 752 816 
+3 816 814 764 
+3 752 753 818 
+3 818 816 752 
+3 753 754 820 
+3 820 818 753 
+3 754 755 822 
+3 822 820 754 
+3 822 755 756 
+3 802 807 823 
+3 823 799 802 
+3 807 809 824 
+3 824 823 807 
+3 809 811 825 
+3 825 824 809 
+3 811 813 826 
+3 826 825 811 
+3 813 815 827 
+3 827 826 813 
+3 815 817 828 
+3 828 827 815 
+3 817 819 829 
+3 829 828 817 
+3 819 821 830 
+3 830 829 819 
+3 830 821 831 
+3 799 832 833 
+3 833 800 799 
+3 799 823 834 
+3 834 832 799 
+3 832 834 835 
+3 835 836 832 
+3 836 835 837 
+3 824 695 696 
+3 696 823 824 
+3 826 827 698 
+3 698 697 826 
+3 829 830 700 
+3 700 699 829 
+3 796 800 702 
+3 702 701 796 
+3 800 823 696 
+3 696 702 800 
+3 794 796 701 
+3 701 703 794 
+3 797 794 703 
+3 703 704 797 
+3 838 797 704 
+3 704 706 838 
+3 838 798 797 
+3 708 839 838 
+3 838 706 708 
+3 840 841 842 
+3 843 756 714 
+3 714 844 843 
+3 844 714 716 
+3 716 845 844 
+3 822 846 821 
+3 821 820 822 
+3 821 846 831 
+3 772 774 777 
+3 777 776 772 
+3 847 718 632 
+3 632 777 847 
+3 777 774 773 
+3 773 847 777 
+3 798 793 788 
+3 838 792 793 
+3 793 798 838 
+3 839 792 838 
+3 839 848 784 
+3 784 792 839 
+3 848 847 773 
+3 773 784 848 
+3 839 708 721 
+3 721 848 839 
+3 718 847 848 
+3 848 721 718 
+3 778 767 771 
+3 771 770 790 
+3 786 791 787 
+3 768 781 772 
+3 771 790 778 
+3 849 850 836 
+3 836 837 849 
+3 832 836 850 
+3 850 833 832 
+3 849 837 835 
+3 833 834 823 
+3 823 800 833 
+3 850 849 835 
+3 835 833 850 
+3 833 835 834 
+3 739 580 738 
+3 738 740 739 
+3 724 580 739 
+3 739 741 724 
+3 724 737 578 
+3 737 724 741 
+3 825 826 697 
+3 697 726 825 
+3 825 726 695 
+3 695 824 825 
+3 829 699 727 
+3 727 828 829 
+3 727 698 827 
+3 827 828 727 
+3 700 830 831 
+3 831 728 700 
+3 851 852 853 
+3 853 841 851 
+3 846 853 852 
+3 852 831 846 
+3 851 841 840 
+3 610 714 756 
+3 716 728 831 
+3 854 845 716 
+3 716 852 854 
+3 852 716 831 
+3 842 854 852 
+3 852 851 842 
+3 840 842 851 
+3 842 841 853 
+3 853 854 842 
+3 845 854 853 
+3 853 844 845 
+3 843 844 853 
+3 846 843 853 
+3 756 843 846 
+3 846 822 756 
+3 744 733 591 
+3 744 743 588 
+3 588 733 744 
+3 744 745 743 
+3 786 785 782 
+3 639 642 643 

BIN
examples/models/ply/binary/dolphins_be.ply


BIN
examples/models/ply/binary/dolphins_le.ply