text: // Generated by Haxe 4.2.0-rc.1+354c24d30
  (function ($hx_exports, $global) { "use strict";
  $hx_exports["hxGeomAlgo"] = $hx_exports["hxGeomAlgo"] || {};
  $hx_exports["hxGeomAlgo"]["_HxPoint"] = $hx_exports["hxGeomAlgo"]["_HxPoint"] || {};
  var $estr = function() { return js_Boot.__string_rec(this,''); },$hxEnums = $hxEnums || {},$_;
  function $extend(from, fields) {
  	var proto = Object.create(from);
  	for (var name in fields) proto[name] = fields[name];
  	if( fields.toString !== Object.prototype.toString ) proto.toString = fields.toString;
  	return proto;
  }
  Math.__name__ = true;
  var Std = function() { };
  Std.__name__ = true;
  Std.string = function(s) {
  	return js_Boot.__string_rec(s,"");
  };
  var fracs_DifferencePreference = $hxEnums["fracs.DifferencePreference"] = { __ename__ : "fracs.DifferencePreference", __constructs__ : ["CLOCKWISE","ANTICLOCKWISE","SMALL","LARGE"]
  	,CLOCKWISE: {_hx_index:0,__enum__:"fracs.DifferencePreference",toString:$estr}
  	,ANTICLOCKWISE: {_hx_index:1,__enum__:"fracs.DifferencePreference",toString:$estr}
  	,SMALL: {_hx_index:2,__enum__:"fracs.DifferencePreference",toString:$estr}
  	,LARGE: {_hx_index:3,__enum__:"fracs.DifferencePreference",toString:$estr}
  };
  var geom_flat_f32_Float32Flat = {};
  geom_flat_f32_Float32Flat.get_size = function(this1) {
  	return this1[1] | 0;
  };
  geom_flat_f32_Float32Flat.set_size = function(this1,id) {
  	var pos_ = id;
  	this1[0] = pos_;
  	if(this1[0] > this1[1] - 1) {
  		this1[1] = this1[0];
  	}
  	return id;
  };
  var geom_flat_f32_Float32FlatRGBA = {};
  geom_flat_f32_Float32FlatRGBA.get_red = function(this1) {
  	return this1[(this1[0] | 0) * 4 + 2];
  };
  geom_flat_f32_Float32FlatRGBA.set_red = function(this1,v) {
  	this1[(this1[0] | 0) * 4 + 2] = v;
  	return v;
  };
  var geom_flat_f32_Float32FlatTriangle = {};
  geom_flat_f32_Float32FlatTriangle.get_ax = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_ax = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_ay = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 1 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_ay = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 1 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_az = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 2 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_az = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 2 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_bx = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 3 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_bx = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 3 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_by = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 4 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_by = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 4 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_bz = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 5 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_bz = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 5 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_cx = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 6 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_cx = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 6 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_cy = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 7 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_cy = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 7 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.get_cz = function(this1) {
  	return this1[(this1[0] | 0) * 9 + 8 + 2];
  };
  geom_flat_f32_Float32FlatTriangle.set_cz = function(this1,v) {
  	this1[(this1[0] | 0) * 9 + 8 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangle.transform = function(this1,m) {
  	var this2 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangle.get_ax(this1),geom_flat_f32_Float32FlatTriangle.get_ay(this1),geom_flat_f32_Float32FlatTriangle.get_az(this1),1.);
  	var pa = this2;
  	var this2 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangle.get_bx(this1),geom_flat_f32_Float32FlatTriangle.get_by(this1),geom_flat_f32_Float32FlatTriangle.get_bz(this1),1.);
  	var pb = this2;
  	var this2 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangle.get_cx(this1),geom_flat_f32_Float32FlatTriangle.get_cy(this1),geom_flat_f32_Float32FlatTriangle.get_cz(this1),1.);
  	var pc = this2;
  	var this2 = new geom_structure_Mat1x4(m.a * pa.x + m.b * pa.y + m.c * pa.z + m.d,m.e * pa.x + m.f * pa.y + m.g * pa.z + m.h,m.i * pa.x + m.j * pa.y + m.k * pa.z + m.l,1.);
  	pa = this2;
  	var this2 = new geom_structure_Mat1x4(m.a * pb.x + m.b * pb.y + m.c * pb.z + m.d,m.e * pb.x + m.f * pb.y + m.g * pb.z + m.h,m.i * pb.x + m.j * pb.y + m.k * pb.z + m.l,1.);
  	pb = this2;
  	var this2 = new geom_structure_Mat1x4(m.a * pc.x + m.b * pc.y + m.c * pc.z + m.d,m.e * pc.x + m.f * pc.y + m.g * pc.z + m.h,m.i * pc.x + m.j * pc.y + m.k * pc.z + m.l,1.);
  	pc = this2;
  	geom_flat_f32_Float32FlatTriangle.set_ax(this1,pa.x);
  	geom_flat_f32_Float32FlatTriangle.set_ay(this1,pa.y);
  	geom_flat_f32_Float32FlatTriangle.set_az(this1,pa.z);
  	geom_flat_f32_Float32FlatTriangle.set_bx(this1,pb.x);
  	geom_flat_f32_Float32FlatTriangle.set_by(this1,pb.y);
  	geom_flat_f32_Float32FlatTriangle.set_bz(this1,pb.z);
  	geom_flat_f32_Float32FlatTriangle.set_cx(this1,pc.x);
  	geom_flat_f32_Float32FlatTriangle.set_cy(this1,pc.y);
  	geom_flat_f32_Float32FlatTriangle.set_cz(this1,pc.z);
  };
  geom_flat_f32_Float32FlatTriangle.transformRange = function(this1,m,start,end) {
  	this1[0] = start;
  	if(this1[0] > this1[1] - 1) {
  		this1[1] = this1[0];
  	}
  	if(end > geom_flat_f32_Float32Flat.get_size(this1) - 1) {
  		geom_flat_f32_Float32Flat.get_size(this1);
  	}
  	var _g = start;
  	var _g1 = end + 1;
  	while(_g < _g1) {
  		var i = _g++;
  		geom_flat_f32_Float32FlatTriangle.transform(this1,m);
  		var pos_ = this1[0] + 1.;
  		this1[0] = pos_;
  		if(this1[0] > this1[1] - 1) {
  			this1[1] = this1[0];
  		}
  	}
  };
  geom_flat_f32_Float32FlatTriangle.triangle = function(this1,ax_,ay_,az_,bx_,by_,bz_,cx_,cy_,cz_) {
  	geom_flat_f32_Float32FlatTriangle.set_ax(this1,ax_);
  	geom_flat_f32_Float32FlatTriangle.set_ay(this1,ay_);
  	geom_flat_f32_Float32FlatTriangle.set_az(this1,az_);
  	geom_flat_f32_Float32FlatTriangle.set_bx(this1,bx_);
  	geom_flat_f32_Float32FlatTriangle.set_by(this1,by_);
  	geom_flat_f32_Float32FlatTriangle.set_bz(this1,bz_);
  	geom_flat_f32_Float32FlatTriangle.set_cx(this1,cx_);
  	geom_flat_f32_Float32FlatTriangle.set_cy(this1,cy_);
  	geom_flat_f32_Float32FlatTriangle.set_cz(this1,cz_);
  	var windingAdjusted = geom_flat_f32_Float32FlatTriangle.adjustWinding(this1);
  	if(windingAdjusted) {
  		geom_flat_f32_Float32FlatTriangle.set_ax(this1,ax_);
  		geom_flat_f32_Float32FlatTriangle.set_ay(this1,ay_);
  		geom_flat_f32_Float32FlatTriangle.set_bx(this1,cx_);
  		geom_flat_f32_Float32FlatTriangle.set_by(this1,cy_);
  		geom_flat_f32_Float32FlatTriangle.set_cx(this1,bx_);
  		geom_flat_f32_Float32FlatTriangle.set_cy(this1,by_);
  	}
  	return windingAdjusted;
  };
  geom_flat_f32_Float32FlatTriangle.adjustWinding = function(this1) {
  	return geom_flat_f32_Float32FlatTriangle.get_ax(this1) * geom_flat_f32_Float32FlatTriangle.get_by(this1) - geom_flat_f32_Float32FlatTriangle.get_bx(this1) * geom_flat_f32_Float32FlatTriangle.get_ay(this1) + (geom_flat_f32_Float32FlatTriangle.get_bx(this1) * geom_flat_f32_Float32FlatTriangle.get_cy(this1) - geom_flat_f32_Float32FlatTriangle.get_cx(this1) * geom_flat_f32_Float32FlatTriangle.get_by(this1)) + (geom_flat_f32_Float32FlatTriangle.get_cx(this1) * geom_flat_f32_Float32FlatTriangle.get_ay(this1) - geom_flat_f32_Float32FlatTriangle.get_ax(this1) * geom_flat_f32_Float32FlatTriangle.get_cy(this1)) > 0;
  };
  var geom_flat_f32_Float32FlatTriangleXY = {};
  geom_flat_f32_Float32FlatTriangleXY.get_ax = function(this1) {
  	return this1[(this1[0] | 0) * 6 + 2];
  };
  geom_flat_f32_Float32FlatTriangleXY.set_ax = function(this1,v) {
  	this1[(this1[0] | 0) * 6 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangleXY.get_ay = function(this1) {
  	return this1[(this1[0] | 0) * 6 + 1 + 2];
  };
  geom_flat_f32_Float32FlatTriangleXY.set_ay = function(this1,v) {
  	this1[(this1[0] | 0) * 6 + 1 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangleXY.get_bx = function(this1) {
  	return this1[(this1[0] | 0) * 6 + 3 + 2];
  };
  geom_flat_f32_Float32FlatTriangleXY.set_bx = function(this1,v) {
  	this1[(this1[0] | 0) * 6 + 3 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangleXY.get_by = function(this1) {
  	return this1[(this1[0] | 0) * 6 + 4 + 2];
  };
  geom_flat_f32_Float32FlatTriangleXY.set_by = function(this1,v) {
  	this1[(this1[0] | 0) * 6 + 4 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangleXY.get_cx = function(this1) {
  	return this1[(this1[0] | 0) * 6 + 6 + 2];
  };
  geom_flat_f32_Float32FlatTriangleXY.set_cx = function(this1,v) {
  	this1[(this1[0] | 0) * 6 + 6 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangleXY.get_cy = function(this1) {
  	return this1[(this1[0] | 0) * 6 + 7 + 2];
  };
  geom_flat_f32_Float32FlatTriangleXY.set_cy = function(this1,v) {
  	this1[(this1[0] | 0) * 6 + 7 + 2] = v;
  	return v;
  };
  geom_flat_f32_Float32FlatTriangleXY.transform = function(this1,m) {
  	var this2 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangleXY.get_ax(this1),geom_flat_f32_Float32FlatTriangleXY.get_ay(this1),1.,1.);
  	var pa = this2;
  	var this2 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangleXY.get_bx(this1),geom_flat_f32_Float32FlatTriangleXY.get_by(this1),1.,1.);
  	var pb = this2;
  	var this2 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangleXY.get_cx(this1),geom_flat_f32_Float32FlatTriangleXY.get_cy(this1),1.,1.);
  	var pc = this2;
  	var this2 = new geom_structure_Mat1x4(m.a * pa.x + m.b * pa.y + m.c * pa.z + m.d,m.e * pa.x + m.f * pa.y + m.g * pa.z + m.h,m.i * pa.x + m.j * pa.y + m.k * pa.z + m.l,1.);
  	pa = this2;
  	var this2 = new geom_structure_Mat1x4(m.a * pb.x + m.b * pb.y + m.c * pb.z + m.d,m.e * pb.x + m.f * pb.y + m.g * pb.z + m.h,m.i * pb.x + m.j * pb.y + m.k * pb.z + m.l,1.);
  	pb = this2;
  	var this2 = new geom_structure_Mat1x4(m.a * pc.x + m.b * pc.y + m.c * pc.z + m.d,m.e * pc.x + m.f * pc.y + m.g * pc.z + m.h,m.i * pc.x + m.j * pc.y + m.k * pc.z + m.l,1.);
  	pc = this2;
  	geom_flat_f32_Float32FlatTriangleXY.set_ax(this1,pa.x);
  	geom_flat_f32_Float32FlatTriangleXY.set_ay(this1,pa.y);
  	geom_flat_f32_Float32FlatTriangleXY.set_bx(this1,pb.x);
  	geom_flat_f32_Float32FlatTriangleXY.set_by(this1,pb.y);
  	geom_flat_f32_Float32FlatTriangleXY.set_cx(this1,pc.x);
  	geom_flat_f32_Float32FlatTriangleXY.set_cy(this1,pc.y);
  };
  geom_flat_f32_Float32FlatTriangleXY.transformAll = function(this1,m) {
  	this1[0] = 0;
  	if(this1[0] > this1[1] - 1) {
  		this1[1] = this1[0];
  	}
  	var _g = 0;
  	var _g1 = geom_flat_f32_Float32Flat.get_size(this1);
  	while(_g < _g1) {
  		var i = _g++;
  		geom_flat_f32_Float32FlatTriangleXY.transform(this1,m);
  		var pos_ = this1[0] + 1.;
  		this1[0] = pos_;
  		if(this1[0] > this1[1] - 1) {
  			this1[1] = this1[0];
  		}
  	}
  };
  geom_flat_f32_Float32FlatTriangleXY.triangle = function(this1,ax_,ay_,bx_,by_,cx_,cy_) {
  	geom_flat_f32_Float32FlatTriangleXY.set_ax(this1,ax_);
  	geom_flat_f32_Float32FlatTriangleXY.set_ay(this1,ay_);
  	geom_flat_f32_Float32FlatTriangleXY.set_bx(this1,bx_);
  	geom_flat_f32_Float32FlatTriangleXY.set_by(this1,by_);
  	geom_flat_f32_Float32FlatTriangleXY.set_cx(this1,cx_);
  	geom_flat_f32_Float32FlatTriangleXY.set_cy(this1,cy_);
  	var windingAdjusted = geom_flat_f32_Float32FlatTriangleXY.adjustWinding(this1);
  	if(windingAdjusted) {
  		geom_flat_f32_Float32FlatTriangleXY.set_ax(this1,ax_);
  		geom_flat_f32_Float32FlatTriangleXY.set_ay(this1,ay_);
  		geom_flat_f32_Float32FlatTriangleXY.set_bx(this1,cx_);
  		geom_flat_f32_Float32FlatTriangleXY.set_by(this1,cy_);
  		geom_flat_f32_Float32FlatTriangleXY.set_cx(this1,bx_);
  		geom_flat_f32_Float32FlatTriangleXY.set_cy(this1,by_);
  	}
  	return windingAdjusted;
  };
  geom_flat_f32_Float32FlatTriangleXY.adjustWinding = function(this1) {
  	return geom_flat_f32_Float32FlatTriangleXY.get_ax(this1) * geom_flat_f32_Float32FlatTriangleXY.get_by(this1) - geom_flat_f32_Float32FlatTriangleXY.get_bx(this1) * geom_flat_f32_Float32FlatTriangleXY.get_ay(this1) + (geom_flat_f32_Float32FlatTriangleXY.get_bx(this1) * geom_flat_f32_Float32FlatTriangleXY.get_cy(this1) - geom_flat_f32_Float32FlatTriangleXY.get_cx(this1) * geom_flat_f32_Float32FlatTriangleXY.get_by(this1)) + (geom_flat_f32_Float32FlatTriangleXY.get_cx(this1) * geom_flat_f32_Float32FlatTriangleXY.get_ay(this1) - geom_flat_f32_Float32FlatTriangleXY.get_ax(this1) * geom_flat_f32_Float32FlatTriangleXY.get_cy(this1)) > 0;
  };
  var geom_move_Axis3 = function() {
  	this.tz = new geom_move_Parameter();
  	this.ty = new geom_move_Parameter();
  	this.tx = new geom_move_Parameter();
  	this.rz = new geom_move_Parameter();
  	this.ry = new geom_move_Parameter();
  	this.rx = new geom_move_Parameter();
  };
  geom_move_Axis3.__name__ = true;
  geom_move_Axis3.prototype = {
  	updateCalculate: function(q) {
  		var rotations = this.rx.trinary.changed || this.ry.trinary.changed || this.rz.trinary.changed;
  		var translations = this.tx.trinary.changed || this.ty.trinary.changed || this.tz.trinary.changed;
  		if(translations || rotations) {
  			var qReal;
  			if(rotations) {
  				var n9 = this.rz.value * 0.5;
  				var n6 = Math.sin(n9);
  				var n5 = Math.cos(n9);
  				var n8 = this.rx.value * 0.5;
  				var n4 = Math.sin(n8);
  				var n3 = Math.cos(n8);
  				var n7 = this.ry.value * 0.5;
  				var n2 = Math.sin(n7);
  				var n1 = Math.cos(n7);
  				var this1 = new geom_structure_Mat1x4(n1 * n4 * n5 + n2 * n3 * n6,n2 * n3 * n5 - n1 * n4 * n6,n1 * n3 * n6 - n2 * n4 * n5,n1 * n3 * n5 + n2 * n4 * n6);
  				qReal = this1;
  			} else {
  				var this1 = new geom_structure_Mat1x4(0.,0.,0.,1.);
  				qReal = this1;
  			}
  			var qDual;
  			if(translations) {
  				var this1 = new geom_structure_Mat1x4(this.tx.value,this.ty.value,this.tz.value,1.);
  				qDual = this1;
  			} else {
  				var this1 = new geom_structure_Mat1x4(0.,0.,0.,0.);
  				qDual = this1;
  			}
  			var currentLength = Math.sqrt(qReal.x * qReal.x + qReal.y * qReal.y + qReal.z * qReal.z + qReal.w * qReal.w);
  			if(currentLength != 0.) {
  				var mul = 1. / currentLength;
  				qReal.x *= mul;
  				qReal.y *= mul;
  				qReal.z *= mul;
  				qReal.w *= mul;
  				var real = qReal.x * qReal.x + qReal.y * qReal.y + qReal.z * qReal.z + qReal.w * qReal.w;
  			}
  			var real = qReal;
  			var this1 = new geom_structure_Mat1x4(qDual.x,qDual.y,qDual.z,0.);
  			var q1 = this1;
  			var this1 = new geom_structure_Mat1x4(q1.x * 0.5,q1.y * 0.5,q1.z * 0.5,q1.w * 0.5);
  			q1 = this1;
  			var this1 = new geom_structure_Mat1x4(q1.x * real.w + q1.y * real.z - q1.z * real.y + q1.w * real.x,-q1.x * real.z + q1.y * real.w + q1.z * real.x + q1.w * real.y,q1.x * real.y - q1.y * real.x + q1.z * real.w + q1.w * real.z,-q1.x * real.x - q1.y * real.y - q1.z * real.z + q1.w * real.w);
  			var dual = this1;
  			var this1 = new geom_structure_DualQ(real,dual);
  			var dualQuaternion = this1;
  			var q1 = q.real;
  			var q2 = dualQuaternion.real;
  			var this1 = new geom_structure_Mat1x4(q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,-q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,-q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w);
  			var q1 = q.dual;
  			var q2 = dualQuaternion.real;
  			var this2 = new geom_structure_Mat1x4(q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,-q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,-q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w);
  			var a = this2;
  			var q1 = q.real;
  			var q2 = dualQuaternion.dual;
  			var this2 = new geom_structure_Mat1x4(q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,-q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,-q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w);
  			var b = this2;
  			var this2 = new geom_structure_Mat1x4(a.x + b.x,a.y + b.y,a.z + b.z,a.w + b.w);
  			var this3 = new geom_structure_DualQ(this1,this2);
  			return this3;
  		} else {
  			return q;
  		}
  	}
  	,__class__: geom_move_Axis3
  };
  var geom_move_Parameter = function() {
  	this.trinary = new geom_move_Trinary(0.);
  	this.value = 0.;
  	this.step = 0.005;
  };
  geom_move_Parameter.__name__ = true;
  geom_move_Parameter.prototype = {
  	__class__: geom_move_Parameter
  };
  var geom_move_Trinary = function(v) {
  	this.changed = false;
  	this.set_trit(v);
  };
  geom_move_Trinary.__name__ = true;
  geom_move_Trinary.prototype = {
  	set_trit: function(v) {
  		if(this.get_trit() == v) {
  			this.changed = false;
  		} else {
  			this.trit = v;
  			this.changed = true;
  		}
  		return v;
  	}
  	,get_trit: function() {
  		return this.trit;
  	}
  	,__class__: geom_move_Trinary
  };
  var geom_obj_TriColors = {};
  geom_obj_TriColors._new = function(ti) {
  	var this1 = ti;
  	return this1;
  };
  var geom_structure_DualQ = function(real,dual) {
  	this.real = real;
  	this.dual = dual;
  };
  geom_structure_DualQ.__name__ = true;
  geom_structure_DualQ.prototype = {
  	__class__: geom_structure_DualQ
  };
  var geom_structure_Mat1x2 = function(x,y) {
  	this.y = 0.;
  	this.x = 0.;
  	this.x = x;
  	this.y = y;
  };
  geom_structure_Mat1x2.__name__ = true;
  geom_structure_Mat1x2.prototype = {
  	__class__: geom_structure_Mat1x2
  };
  var geom_structure_Mat1x4 = function(x,y,z,w) {
  	if(w == null) {
  		w = 1.;
  	}
  	this.w = 1.;
  	this.z = 0.;
  	this.y = 0.;
  	this.x = 0.;
  	this.x = x;
  	this.y = y;
  	this.z = z;
  	this.w = w;
  };
  geom_structure_Mat1x4.__name__ = true;
  geom_structure_Mat1x4.prototype = {
  	__class__: geom_structure_Mat1x4
  };
  var geom_structure_Mat4x3 = function(a,b,c,d,e,f,g,h,i,j,k,l) {
  	this.l = 0.;
  	this.k = 0.;
  	this.j = 0.;
  	this.i = 0.;
  	this.h = 0.;
  	this.g = 0.;
  	this.f = 0.;
  	this.e = 0.;
  	this.d = 0.;
  	this.c = 0.;
  	this.b = 0.;
  	this.a = 0.;
  	this.a = a;
  	this.b = b;
  	this.c = c;
  	this.d = d;
  	this.e = e;
  	this.f = f;
  	this.g = g;
  	this.h = h;
  	this.i = i;
  	this.j = j;
  	this.k = k;
  	this.l = l;
  };
  geom_structure_Mat4x3.__name__ = true;
  geom_structure_Mat4x3.prototype = {
  	__class__: geom_structure_Mat4x3
  };
  var geom_structure_Mat4x4 = function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) {
  	this.p = 0.;
  	this.o = 0.;
  	this.n = 0.;
  	this.m = 0.;
  	this.l = 0.;
  	this.k = 0.;
  	this.j = 0.;
  	this.i = 0.;
  	this.h = 0.;
  	this.g = 0.;
  	this.f = 0.;
  	this.e = 0.;
  	this.d = 0.;
  	this.c = 0.;
  	this.b = 0.;
  	this.a = 0.;
  	this.a = a;
  	this.b = b;
  	this.c = c;
  	this.d = d;
  	this.e = e;
  	this.f = f;
  	this.g = g;
  	this.h = h;
  	this.i = i;
  	this.j = j;
  	this.k = k;
  	this.l = l;
  	this.m = m;
  	this.n = n;
  	this.o = o;
  	this.p = p;
  };
  geom_structure_Mat4x4.__name__ = true;
  geom_structure_Mat4x4.prototype = {
  	__class__: geom_structure_Mat4x4
  };
  var geom_structure_TriInt = function(a,b,c) {
  	this.a = a;
  	this.b = b;
  	this.c = c;
  };
  geom_structure_TriInt.__name__ = true;
  geom_structure_TriInt.prototype = {
  	__class__: geom_structure_TriInt
  };
  var geom_structure_TriVec = function(a,b,c) {
  	this.a = a;
  	this.b = b;
  	this.c = c;
  };
  geom_structure_TriVec.__name__ = true;
  geom_structure_TriVec.prototype = {
  	__class__: geom_structure_TriVec
  };
  var haxe_IMap = function() { };
  haxe_IMap.__name__ = true;
  haxe_IMap.__isInterface__ = true;
  var haxe_Exception = function(message,previous,native) {
  	Error.call(this,message);
  	this.message = message;
  	this.__previousException = previous;
  	this.__nativeException = native != null ? native : this;
  };
  haxe_Exception.__name__ = true;
  haxe_Exception.thrown = function(value) {
  	if(((value) instanceof haxe_Exception)) {
  		return value.get_native();
  	} else if(((value) instanceof Error)) {
  		return value;
  	} else {
  		var e = new haxe_ValueException(value);
  		return e;
  	}
  };
  haxe_Exception.__super__ = Error;
  haxe_Exception.prototype = $extend(Error.prototype,{
  	get_native: function() {
  		return this.__nativeException;
  	}
  	,__class__: haxe_Exception
  });
  var haxe_Log = function() { };
  haxe_Log.__name__ = true;
  haxe_Log.formatOutput = function(v,infos) {
  	var str = Std.string(v);
  	if(infos == null) {
  		return str;
  	}
  	var pstr = infos.fileName + ":" + infos.lineNumber;
  	if(infos.customParams != null) {
  		var _g = 0;
  		var _g1 = infos.customParams;
  		while(_g < _g1.length) {
  			var v = _g1[_g];
  			++_g;
  			str += ", " + Std.string(v);
  		}
  	}
  	return pstr + ": " + str;
  };
  haxe_Log.trace = function(v,infos) {
  	var str = haxe_Log.formatOutput(v,infos);
  	if(typeof(console) != "undefined" && console.log != null) {
  		console.log(str);
  	}
  };
  var haxe_ValueException = function(value,previous,native) {
  	haxe_Exception.call(this,String(value),previous,native);
  	this.value = value;
  };
  haxe_ValueException.__name__ = true;
  haxe_ValueException.__super__ = haxe_Exception;
  haxe_ValueException.prototype = $extend(haxe_Exception.prototype,{
  	__class__: haxe_ValueException
  });
  var haxe_ds_StringMap = function() {
  	this.h = Object.create(null);
  };
  haxe_ds_StringMap.__name__ = true;
  haxe_ds_StringMap.__interfaces__ = [haxe_IMap];
  haxe_ds_StringMap.prototype = {
  	__class__: haxe_ds_StringMap
  };
  var haxe_iterators_ArrayIterator = function(array) {
  	this.current = 0;
  	this.array = array;
  };
  haxe_iterators_ArrayIterator.__name__ = true;
  haxe_iterators_ArrayIterator.prototype = {
  	hasNext: function() {
  		return this.current < this.array.length;
  	}
  	,next: function() {
  		return this.array[this.current++];
  	}
  	,__class__: haxe_iterators_ArrayIterator
  };
  var htmlHelper_tools_AnimateTimer = function() { };
  htmlHelper_tools_AnimateTimer.__name__ = true;
  htmlHelper_tools_AnimateTimer.loop = function(tim) {
  	window.requestAnimationFrame(htmlHelper_tools_AnimateTimer.loop);
  	if(htmlHelper_tools_AnimateTimer.onFrame != null) {
  		htmlHelper_tools_AnimateTimer.onFrame(htmlHelper_tools_AnimateTimer.counter);
  	}
  	htmlHelper_tools_AnimateTimer.counter++;
  	return true;
  };
  var htmlHelper_tools_CharacterInput = function() {
  	this.controlDown = false;
  	this.spaceDown = false;
  	this.cmdDown = false;
  	this.altDown = false;
  	this.tabDown = false;
  	this.deleteDown = false;
  	this.enterDown = false;
  	this.shiftDown = false;
  	this.upDown = false;
  	this.downDown = false;
  	this.rightDown = false;
  	this.leftDown = false;
  	var _gthis = this;
  	window.document.onkeydown = $bind(this,this.keyDown);
  	window.document.onkeyup = $bind(this,this.keyUp);
  	this.navSignal = function() {
  		haxe_Log.trace(_gthis.navDown(),{ fileName : "htmlHelper/tools/CharacterInput.hx", lineNumber : 26, className : "htmlHelper.tools.CharacterInput", methodName : "new"});
  	};
  	this.commandSignal = function() {
  		haxe_Log.trace(_gthis.commandDown(),{ fileName : "htmlHelper/tools/CharacterInput.hx", lineNumber : 27, className : "htmlHelper.tools.CharacterInput", methodName : "new"});
  	};
  	this.letterSignal = function(s) {
  		haxe_Log.trace("letter pressed " + s,{ fileName : "htmlHelper/tools/CharacterInput.hx", lineNumber : 28, className : "htmlHelper.tools.CharacterInput", methodName : "new"});
  	};
  };
  htmlHelper_tools_CharacterInput.__name__ = true;
  htmlHelper_tools_CharacterInput.prototype = {
  	navDown: function() {
  		var str = "";
  		if(this.leftDown) {
  			str += "left,";
  		}
  		if(this.rightDown) {
  			str += "right,";
  		}
  		if(this.downDown) {
  			str += "down,";
  		}
  		if(this.upDown) {
  			str += "up,";
  		}
  		return str;
  	}
  	,commandDown: function() {
  		var str = "";
  		if(this.shiftDown) {
  			str += "shift,";
  		}
  		if(this.enterDown) {
  			str += "enter,";
  		}
  		if(this.tabDown) {
  			str += "tab,";
  		}
  		if(this.altDown) {
  			str += "alt,";
  		}
  		if(this.cmdDown) {
  			str += "cmd,";
  		}
  		if(this.spaceDown) {
  			str += "space,";
  		}
  		if(this.controlDown) {
  			str += "control,";
  		}
  		if(this.deleteDown) {
  			str += "delete";
  		}
  		return str;
  	}
  	,keyDown: function(e) {
  		e.preventDefault();
  		var keyCode = e.keyCode;
  		switch(keyCode) {
  		case 8:
  			this.deleteDown = true;
  			this.commandSignal();
  			break;
  		case 9:
  			this.tabDown = true;
  			this.commandSignal();
  			break;
  		case 13:
  			this.enterDown = true;
  			this.commandSignal();
  			break;
  		case 16:
  			this.shiftDown = true;
  			this.commandSignal();
  			break;
  		case 17:
  			this.controlDown = true;
  			this.commandSignal();
  			break;
  		case 18:
  			this.altDown = true;
  			this.commandSignal();
  			break;
  		case 32:
  			this.spaceDown = true;
  			this.commandSignal();
  			break;
  		case 37:
  			this.leftDown = true;
  			this.navSignal();
  			break;
  		case 38:
  			this.upDown = true;
  			this.navSignal();
  			break;
  		case 39:
  			this.rightDown = true;
  			this.navSignal();
  			break;
  		case 40:
  			this.downDown = true;
  			this.navSignal();
  			break;
  		case 224:
  			this.cmdDown = true;
  			this.commandSignal();
  			break;
  		default:
  			if(e.key != null) {
  				this.letterSignal(e.key);
  			}
  		}
  	}
  	,keyUp: function(e) {
  		e.preventDefault();
  		var keyCode = e.keyCode;
  		switch(keyCode) {
  		case 8:
  			this.deleteDown = false;
  			this.commandSignal();
  			break;
  		case 9:
  			this.tabDown = false;
  			this.commandSignal();
  			break;
  		case 13:
  			this.enterDown = false;
  			this.commandSignal();
  			break;
  		case 16:
  			this.shiftDown = false;
  			this.commandSignal();
  			break;
  		case 17:
  			this.controlDown = false;
  			this.commandSignal();
  			break;
  		case 18:
  			this.altDown = false;
  			this.commandSignal();
  			break;
  		case 32:
  			this.spaceDown = false;
  			this.commandSignal();
  			break;
  		case 37:
  			this.leftDown = false;
  			this.navSignal();
  			break;
  		case 38:
  			this.upDown = false;
  			this.navSignal();
  			break;
  		case 39:
  			this.rightDown = false;
  			this.navSignal();
  			break;
  		case 40:
  			this.downDown = false;
  			this.navSignal();
  			break;
  		case 224:
  			this.cmdDown = false;
  			this.commandSignal();
  			break;
  		default:
  		}
  	}
  	,__class__: htmlHelper_tools_CharacterInput
  };
  var htmlHelper_tools_DivertTrace = function(left,d) {
  	if(left == null) {
  		left = 610;
  	}
  	this.textStyle1 = "<span style=\"font-size:14px; color:Grey\">";
  	this.textStyle0 = "<span style=\"font-size:12px; color:Silver\">";
  	this.traceString = "";
  	this.divertTrace(left,d);
  };
  htmlHelper_tools_DivertTrace.__name__ = true;
  htmlHelper_tools_DivertTrace.prototype = {
  	divertTrace: function(left,d) {
  		if(d == null) {
  			var doc = window.document;
  			this.traceDiv = doc.createElement("div");
  			doc.body.appendChild(this.traceDiv);
  			var dom = this.traceDiv;
  			var style = dom.style;
  			style.position = "absolute";
  			style.top = "0px";
  			style.left = (left == null ? "null" : "" + left) + "px";
  			style.height = "500px";
  			style.width = "500px";
  			style.zIndex = "99";
  			style.overflow = "auto";
  		} else {
  			this.traceDiv = d;
  		}
  		haxe_Log.trace = $bind(this,this.myTrace);
  	}
  	,myTrace: function(v,inf) {
  		if(Std.string(v) == "") {
  			return;
  		}
  		this.traceString += this.textStyle0 + inf.className + "." + inf.methodName + " ( " + (inf.lineNumber == null ? "null" : "" + inf.lineNumber) + " )" + "</span>" + "<br> - " + this.textStyle1 + Std.string(v) + "</span>" + "<br>";
  		this.traceDiv.innerHTML = this.traceString;
  	}
  	,__class__: htmlHelper_tools_DivertTrace
  };
  var htmlHelper_tools_ImageLoader = function(imageNames,loaded_) {
  	this.images = new haxe_ds_StringMap();
  	this.loaded = loaded_;
  	this.count = imageNames.length;
  	var _g = 0;
  	while(_g < imageNames.length) {
  		var name = imageNames[_g];
  		++_g;
  		this.load(name);
  	}
  };
  htmlHelper_tools_ImageLoader.__name__ = true;
  htmlHelper_tools_ImageLoader.prototype = {
  	load: function(img) {
  		var image = window.document.createElement("img");
  		var imgStyle = image.style;
  		imgStyle.left = "0px";
  		imgStyle.top = "0px";
  		imgStyle.paddingLeft = "0px";
  		imgStyle.paddingTop = "0px";
  		var _g = $bind(this,this.store);
  		var image1 = image;
  		var name = img.split("/").pop();
  		image.onload = function(e) {
  			_g(image1,name,e);
  		};
  		imgStyle.position = "absolute";
  		image.src = img;
  	}
  	,loadEncoded: function(imageEncoded,imageNames) {
  		this.count = imageNames.length;
  		var _g = 0;
  		var _g1 = this.count;
  		while(_g < _g1) {
  			var i = _g++;
  			this.encodedLoad(imageEncoded[i],imageNames[i]);
  		}
  	}
  	,encodedLoad: function(imgStr,name) {
  		var image = window.document.createElement("img");
  		var imgStyle = image.style;
  		imgStyle.left = "0px";
  		imgStyle.top = "0px";
  		imgStyle.paddingLeft = "0px";
  		imgStyle.paddingTop = "0px";
  		var _g = $bind(this,this.store);
  		var image1 = image;
  		var name1 = name;
  		image.onload = function(e) {
  			_g(image1,name1,e);
  		};
  		imgStyle.position = "absolute";
  		image.src = imgStr;
  	}
  	,store: function(image,name,e) {
  		this.count--;
  		haxe_Log.trace("store " + name + " " + this.count,{ fileName : "htmlHelper/tools/ImageLoader.hx", lineNumber : 52, className : "htmlHelper.tools.ImageLoader", methodName : "store"});
  		this.images.h[name] = image;
  		if(this.count == 0) {
  			this.loaded();
  		}
  	}
  	,__class__: htmlHelper_tools_ImageLoader
  };
  var htmlHelper_webgl_WebGLSetup = function(width_,height_,autoChild) {
  	if(autoChild == null) {
  		autoChild = true;
  	}
  	this.colors = new Float32Array(100);
  	this.indices = new Uint16Array(100);
  	this.vertices = new Float32Array(100);
  	this.BACK = true;
  	this.CULL_FACE = true;
  	this.DEPTH_TEST = true;
  	this.bgAlpha = 1.;
  	this.bgBlue = 1.;
  	this.bgGreen = 1.;
  	this.bgRed = 1.;
  	haxe_Log.trace("dev htmlHelper",{ fileName : "htmlHelper/webgl/WebGLSetup.hx", lineNumber : 97, className : "htmlHelper.webgl.WebGLSetup", methodName : "new"});
  	var this1 = new Float32Array(16);
  	var arr = this1;
  	arr[0] = 1.0;
  	arr[1] = 0.0;
  	arr[2] = 0.0;
  	arr[3] = 0.0;
  	arr[4] = 1.0;
  	arr[5] = 0.0;
  	arr[6] = 0.0;
  	arr[7] = 0.0;
  	arr[8] = 1.0;
  	arr[9] = 0.0;
  	arr[10] = 0.0;
  	arr[11] = 0.0;
  	arr[12] = 1.0;
  	arr[13] = 0.0;
  	arr[14] = 0.0;
  	arr[15] = 0.0;
  	this.matrix32Array = arr;
  	this.setupCanvas(width_,height_,autoChild);
  };
  htmlHelper_webgl_WebGLSetup.__name__ = true;
  htmlHelper_webgl_WebGLSetup.prototype = {
  	setupCanvas: function(width_,height_,autoChild) {
  		if(autoChild == null) {
  			autoChild = true;
  		}
  		this.width = width_;
  		this.height = height_;
  		this.canvas = window.document.createElement("canvas");
  		this.canvas.width = this.width;
  		this.canvas.height = this.height;
  		var dom = this.canvas;
  		var style = dom.style;
  		style.paddingLeft = "0px";
  		style.paddingTop = "0px";
  		style.left = Std.string(0 + "px");
  		style.top = Std.string(0 + "px");
  		style.position = "absolute";
  		if(autoChild) {
  			window.document.body.appendChild(this.canvas);
  		}
  		this.gl = js_html__$CanvasElement_CanvasUtil.getContextWebGL(this.canvas,null);
  	}
  	,setupProgram: function(vertexString,fragmentString) {
  		var gl = this.gl;
  		var shader = gl.createShader(35633);
  		gl.shaderSource(shader,vertexString);
  		gl.compileShader(shader);
  		var vertex = shader;
  		var gl = this.gl;
  		var shader = gl.createShader(35632);
  		gl.shaderSource(shader,fragmentString);
  		gl.compileShader(shader);
  		var fragment = shader;
  		var gl = this.gl;
  		var program = gl.createProgram();
  		gl.attachShader(program,vertex);
  		gl.attachShader(program,fragment);
  		gl.linkProgram(program);
  		gl.useProgram(program);
  		this.program = program;
  		return this.program;
  	}
  	,addImage: function(img) {
  		var gl = this.gl;
  		var texture = gl.createTexture();
  		gl.activeTexture(33984);
  		gl.bindTexture(3553,texture);
  		gl.pixelStorei(37440,1);
  		gl.texParameteri(3553,10242,33071);
  		gl.texParameteri(3553,10243,33071);
  		gl.texParameteri(3553,10241,9728);
  		gl.texParameteri(3553,10240,9728);
  		gl.texImage2D(3553,0,6408,6408,5121,img);
  	}
  	,render: function() {
  		this.gl.clearColor(this.bgRed,this.bgGreen,this.bgBlue,this.bgAlpha);
  		if(this.DEPTH_TEST) {
  			this.gl.enable(2929);
  		}
  		if(this.CULL_FACE) {
  			this.gl.enable(2884);
  		}
  		if(this.BACK) {
  			this.gl.cullFace(1029);
  		}
  		this.gl.clear(16384);
  		this.gl.viewport(0,0,this.canvas.width,this.canvas.height);
  		var modelViewProjectionID = this.gl.getUniformLocation(this.program,"modelViewProjection");
  		this.gl.uniformMatrix4fv(modelViewProjectionID,false,this.matrix32Array);
  		this.gl.drawArrays(4,0,this.indices.length);
  	}
  	,__class__: htmlHelper_webgl_WebGLSetup
  };
  var hxGeomAlgo_HomogCoord = function(x,y,w) {
  	if(w == null) {
  		w = 1;
  	}
  	if(y == null) {
  		y = 0;
  	}
  	if(x == null) {
  		x = 0;
  	}
  	this.x = x;
  	this.y = y;
  	this.w = w;
  };
  hxGeomAlgo_HomogCoord.__name__ = true;
  hxGeomAlgo_HomogCoord.prototype = {
  	__class__: hxGeomAlgo_HomogCoord
  };
  var hxGeomAlgo_HxPointData = function(x,y) {
  	if(y == null) {
  		y = 0;
  	}
  	if(x == null) {
  		x = 0;
  	}
  	this.x = x;
  	this.y = y;
  };
  hxGeomAlgo_HxPointData.__name__ = true;
  hxGeomAlgo_HxPointData.prototype = {
  	__class__: hxGeomAlgo_HxPointData
  };
  var hxGeomAlgo_HxPoint = $hx_exports["hxGeomAlgo"]["HxPoint"] = {};
  hxGeomAlgo_HxPoint.get_x = function(this1) {
  	return this1.x;
  };
  hxGeomAlgo_HxPoint.set_x = function(this1,value) {
  	return this1.x = value;
  };
  hxGeomAlgo_HxPoint.get_y = function(this1) {
  	return this1.y;
  };
  hxGeomAlgo_HxPoint.set_y = function(this1,value) {
  	return this1.y = value;
  };
  hxGeomAlgo_HxPoint._new = function(x,y) {
  	if(y == null) {
  		y = 0;
  	}
  	if(x == null) {
  		x = 0;
  	}
  	var this1 = new hxGeomAlgo_HxPointData(x,y);
  	return this1;
  };
  hxGeomAlgo_HxPoint.setTo = function(this1,newX,newY) {
  	this1.x = newX;
  	this1.y = newY;
  };
  hxGeomAlgo_HxPoint.equals = function(this1,p) {
  	if(p != null && this1.x == p.x) {
  		return this1.y == p.y;
  	} else {
  		return false;
  	}
  };
  hxGeomAlgo_HxPoint.clone = function(this1) {
  	return hxGeomAlgo_HxPoint._new(this1.x,this1.y);
  };
  hxGeomAlgo_HxPoint.toString = function(this1) {
  	return "(" + this1.x + ", " + this1.y + ")";
  };
  hxGeomAlgo_HxPoint.fromPointStruct = function(p) {
  	return hxGeomAlgo_HxPoint._new(p.x,p.y);
  };
  hxGeomAlgo_HxPoint.toPointStruct = function(this1) {
  	return { x : this1.x, y : this1.y};
  };
  var hxGeomAlgo_PolyTools = $hx_exports["hxGeomAlgo"]["PolyTools"] = function() { };
  hxGeomAlgo_PolyTools.__name__ = true;
  hxGeomAlgo_PolyTools.isCCW = function(poly) {
  	if(poly.length <= 2) {
  		return true;
  	}
  	var signedArea = 0.;
  	var _g = 0;
  	var _g1 = poly.length;
  	while(_g < _g1) {
  		var i = _g++;
  		var idx = i - 1;
  		var idx1 = idx;
  		var len = poly.length;
  		if(idx1 < 0) {
  			idx1 += len;
  		}
  		idx = idx1 % len;
  		var idx2 = i - 1;
  		var idx3 = idx2;
  		var len1 = poly.length;
  		if(idx3 < 0) {
  			idx3 += len1;
  		}
  		idx2 = idx3 % len1;
  		signedArea += poly[idx].x * poly[i].y - poly[i].x * poly[idx2].y;
  	}
  	return signedArea < 0;
  };
  hxGeomAlgo_PolyTools.isCW = function(poly) {
  	if(poly.length <= 2) {
  		return true;
  	}
  	var signedArea = 0.;
  	var _g = 0;
  	var _g1 = poly.length;
  	while(_g < _g1) {
  		var i = _g++;
  		var idx = i - 1;
  		var idx1 = idx;
  		var len = poly.length;
  		if(idx1 < 0) {
  			idx1 += len;
  		}
  		idx = idx1 % len;
  		var idx2 = i - 1;
  		var idx3 = idx2;
  		var len1 = poly.length;
  		if(idx3 < 0) {
  			idx3 += len1;
  		}
  		idx2 = idx3 % len1;
  		signedArea += poly[idx].x * poly[i].y - poly[i].x * poly[idx2].y;
  	}
  	return signedArea > 0;
  };
  hxGeomAlgo_PolyTools.makeCCW = function(poly) {
  	var reversed = false;
  	if(!hxGeomAlgo_PolyTools.isCCW(poly)) {
  		poly.reverse();
  		reversed = true;
  	}
  	return reversed;
  };
  hxGeomAlgo_PolyTools.makeCW = function(poly) {
  	var reversed = false;
  	if(hxGeomAlgo_PolyTools.isCCW(poly)) {
  		poly.reverse();
  		reversed = true;
  	}
  	return reversed;
  };
  hxGeomAlgo_PolyTools.isConvex = function(poly) {
  	var isPositive = null;
  	var _g = 0;
  	var _g1 = poly.length;
  	while(_g < _g1) {
  		var i = _g++;
  		var lower = i == 0 ? poly.length - 1 : i - 1;
  		var middle = i;
  		var upper = i == poly.length - 1 ? 0 : i + 1;
  		var dx0 = poly[middle].x - poly[lower].x;
  		var dy0 = poly[middle].y - poly[lower].y;
  		var dx1 = poly[upper].x - poly[middle].x;
  		var dy1 = poly[upper].y - poly[middle].y;
  		var cross = dx0 * dy1 - dx1 * dy0;
  		var newIsPositive = cross > 0;
  		if(cross == 0) {
  			continue;
  		}
  		if(isPositive == null) {
  			isPositive = newIsPositive;
  		} else if(isPositive != newIsPositive) {
  			return false;
  		}
  	}
  	return true;
  };
  hxGeomAlgo_PolyTools.isSimple = function(poly) {
  	var len = poly.length;
  	if(len <= 3) {
  		return true;
  	}
  	var _g = 0;
  	var _g1 = len;
  	while(_g < _g1) {
  		var i = _g++;
  		var p0 = i;
  		var p1 = i == len - 1 ? 0 : i + 1;
  		var _g2 = i + 1;
  		var _g3 = len;
  		while(_g2 < _g3) {
  			var j = _g2++;
  			var q0 = j;
  			var q1 = j == len - 1 ? 0 : j + 1;
  			var intersection = hxGeomAlgo_PolyTools.segmentIntersect(poly[p0],poly[p1],poly[q0],poly[q1]);
  			var tmp;
  			var tmp1;
  			if(intersection != null) {
  				var tmp2;
  				var w = poly[p0];
  				var x = intersection.x - w.x;
  				var x1 = intersection.y - w.y;
  				if(!(Math.sqrt(x * x + x1 * x1) < hxGeomAlgo_PolyTools.EPSILON)) {
  					var w1 = poly[p1];
  					var x2 = intersection.x - w1.x;
  					var x3 = intersection.y - w1.y;
  					tmp2 = Math.sqrt(x2 * x2 + x3 * x3) < hxGeomAlgo_PolyTools.EPSILON;
  				} else {
  					tmp2 = true;
  				}
  				tmp1 = !tmp2;
  			} else {
  				tmp1 = false;
  			}
  			if(tmp1) {
  				var tmp3;
  				var w2 = poly[q0];
  				var x4 = intersection.x - w2.x;
  				var x5 = intersection.y - w2.y;
  				if(!(Math.sqrt(x4 * x4 + x5 * x5) < hxGeomAlgo_PolyTools.EPSILON)) {
  					var w3 = poly[q1];
  					var x6 = intersection.x - w3.x;
  					var x7 = intersection.y - w3.y;
  					tmp3 = Math.sqrt(x6 * x6 + x7 * x7) < hxGeomAlgo_PolyTools.EPSILON;
  				} else {
  					tmp3 = true;
  				}
  				tmp = !tmp3;
  			} else {
  				tmp = false;
  			}
  			if(tmp) {
  				return false;
  			}
  		}
  	}
  	return true;
  };
  hxGeomAlgo_PolyTools.segmentIntersect = function(p0,p1,q0,q1) {
  	var a1 = p1.y - p0.y;
  	var b1 = p0.x - p1.x;
  	var c1 = p1.x * p0.y - p0.x * p1.y;
  	var a2 = q1.y - q0.y;
  	var b2 = q0.x - q1.x;
  	var c2 = q1.x * q0.y - q0.x * q1.y;
  	var denom = a1 * b2 - a2 * b1;
  	if(denom == 0) {
  		return null;
  	}
  	var intersectionPoint = hxGeomAlgo_HxPoint._new();
  	intersectionPoint.x = (b1 * c2 - b2 * c1) / denom;
  	intersectionPoint.y = (a2 * c1 - a1 * c2) / denom;
  	var x = p0.x - p1.x;
  	var x1 = p0.y - p1.y;
  	var p0p1 = x * x + x1 * x1;
  	var x = q0.x - q1.x;
  	var x1 = q0.y - q1.y;
  	var q0q1 = x * x + x1 * x1;
  	var x = intersectionPoint.x - p1.x;
  	var x1 = intersectionPoint.y - p1.y;
  	if(x * x + x1 * x1 > p0p1) {
  		return null;
  	}
  	var x = intersectionPoint.x - p0.x;
  	var x1 = intersectionPoint.y - p0.y;
  	if(x * x + x1 * x1 > p0p1) {
  		return null;
  	}
  	var x = intersectionPoint.x - q1.x;
  	var x1 = intersectionPoint.y - q1.y;
  	if(x * x + x1 * x1 > q0q1) {
  		return null;
  	}
  	var x = intersectionPoint.x - q0.x;
  	var x1 = intersectionPoint.y - q0.y;
  	if(x * x + x1 * x1 > q0q1) {
  		return null;
  	}
  	return intersectionPoint;
  };
  hxGeomAlgo_PolyTools.findDuplicatePoints = function(poly,consecutiveOnly,wrapAround) {
  	if(wrapAround == null) {
  		wrapAround = true;
  	}
  	if(consecutiveOnly == null) {
  		consecutiveOnly = true;
  	}
  	var len = poly.length;
  	if(len <= 1) {
  		return [];
  	}
  	var dupIndices = [];
  	var _g = 0;
  	var _g1 = len - 1;
  	while(_g < _g1) {
  		var i = _g++;
  		var j = i + 1;
  		while(j < len) {
  			var this1 = poly[i];
  			var p = poly[j];
  			var foundDup = p != null && this1.x == p.x && this1.y == p.y;
  			if(foundDup) {
  				dupIndices.push(i);
  			}
  			if(consecutiveOnly || foundDup && !consecutiveOnly) {
  				break;
  			}
  			++j;
  		}
  	}
  	var tmp;
  	if(wrapAround && consecutiveOnly) {
  		var this1 = poly[0];
  		var p = poly[len - 1];
  		tmp = p != null && this1.x == p.x && this1.y == p.y;
  	} else {
  		tmp = false;
  	}
  	if(tmp) {
  		dupIndices.push(len - 1);
  	}
  	return dupIndices;
  };
  hxGeomAlgo_PolyTools.intersection = function(p1,p2,q1,q2) {
  	var res = null;
  	var a1 = p2.y - p1.y;
  	var b1 = p1.x - p2.x;
  	var c1 = a1 * p1.x + b1 * p1.y;
  	var a2 = q2.y - q1.y;
  	var b2 = q1.x - q2.x;
  	var c2 = a2 * q1.x + b2 * q1.y;
  	var det = a1 * b2 - a2 * b1;
  	if(!(Math.abs(det) <= hxGeomAlgo_PolyTools.EPSILON)) {
  		res = hxGeomAlgo_HxPoint._new();
  		res.x = (b2 * c1 - b1 * c2) / det;
  		res.y = (a1 * c2 - a2 * c1) / det;
  	}
  	return res;
  };
  hxGeomAlgo_PolyTools.isReflex = function(poly,idx) {
  	var idx1 = idx - 1;
  	var idx2 = idx1;
  	var len = poly.length;
  	if(idx2 < 0) {
  		idx2 += len;
  	}
  	idx1 = idx2 % len;
  	var p = poly[idx1];
  	var idx1 = idx;
  	var idx2 = idx1;
  	var len = poly.length;
  	if(idx2 < 0) {
  		idx2 += len;
  	}
  	idx1 = idx2 % len;
  	var a = poly[idx1];
  	var idx1 = idx + 1;
  	var idx = idx1;
  	var len = poly.length;
  	if(idx < 0) {
  		idx += len;
  	}
  	idx1 = idx % len;
  	var b = poly[idx1];
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y) < 0;
  };
  hxGeomAlgo_PolyTools.at = function(poly,idx) {
  	var idx1 = idx;
  	var len = poly.length;
  	if(idx1 < 0) {
  		idx1 += len;
  	}
  	idx = idx1 % len;
  	return poly[idx];
  };
  hxGeomAlgo_PolyTools.wrappedIdx = function(poly,idx) {
  	var len = poly.length;
  	if(idx < 0) {
  		idx += len;
  	}
  	return idx % len;
  };
  hxGeomAlgo_PolyTools.side = function(p,a,b) {
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y);
  };
  hxGeomAlgo_PolyTools.isLeft = function(p,a,b) {
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y) > 0;
  };
  hxGeomAlgo_PolyTools.isLeftOrOn = function(p,a,b) {
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y) >= 0;
  };
  hxGeomAlgo_PolyTools.isRight = function(p,a,b) {
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y) < 0;
  };
  hxGeomAlgo_PolyTools.isRightOrOn = function(p,a,b) {
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y) <= 0;
  };
  hxGeomAlgo_PolyTools.isCollinear = function(p,a,b) {
  	return (a.x - p.x) * (b.y - p.y) - (b.x - p.x) * (a.y - p.y) == 0;
  };
  hxGeomAlgo_PolyTools.distance = function(v,w) {
  	var x = v.x - w.x;
  	var x1 = v.y - w.y;
  	return Math.sqrt(x * x + x1 * x1);
  };
  hxGeomAlgo_PolyTools.distanceToSegment = function(p,v,w) {
  	return Math.sqrt(hxGeomAlgo_PolyTools.distanceToSegmentSquared(p,v,w));
  };
  hxGeomAlgo_PolyTools.distanceSquared = function(v,w) {
  	var x = v.x - w.x;
  	var x1 = v.y - w.y;
  	return x * x + x1 * x1;
  };
  hxGeomAlgo_PolyTools.distanceToSegmentSquared = function(p,v,w) {
  	var x = v.x - w.x;
  	var x1 = v.y - w.y;
  	var l2 = x * x + x1 * x1;
  	if(l2 == 0) {
  		var x = p.x - v.x;
  		var x1 = p.y - v.y;
  		return x * x + x1 * x1;
  	}
  	var t = ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y)) / l2;
  	if(t < 0) {
  		var x = p.x - v.x;
  		var x1 = p.y - v.y;
  		return x * x + x1 * x1;
  	}
  	if(t > 1) {
  		var x = p.x - w.x;
  		var x1 = p.y - w.y;
  		return x * x + x1 * x1;
  	}
  	hxGeomAlgo_HxPoint.setTo(hxGeomAlgo_PolyTools.point,v.x + t * (w.x - v.x),v.y + t * (w.y - v.y));
  	var w = hxGeomAlgo_PolyTools.point;
  	var x = p.x - w.x;
  	var x1 = p.y - w.y;
  	return x * x + x1 * x1;
  };
  hxGeomAlgo_PolyTools.getCentroid = function(poly) {
  	var c = hxGeomAlgo_HxPoint._new();
  	var area = hxGeomAlgo_PolyTools.getArea(poly);
  	if(area != 0) {
  		var len = poly.length;
  		var _g = 0;
  		var _g1 = len;
  		while(_g < _g1) {
  			var i = _g++;
  			var p0 = poly[i];
  			var p1 = poly[(i + 1) % len];
  			var m = p0.x * p1.y - p1.x * p0.y;
  			c.x += (p0.x + p1.x) * m;
  			c.y += (p0.y + p1.y) * m;
  		}
  		c.x /= 6 * area;
  		c.y /= 6 * area;
  	} else {
  		c = hxGeomAlgo_HxPoint.EMPTY;
  	}
  	return c;
  };
  hxGeomAlgo_PolyTools.getArea = function(poly) {
  	var area = 0.0;
  	var len = poly.length;
  	var _g = 0;
  	var _g1 = len;
  	while(_g < _g1) {
  		var i = _g++;
  		var p0 = poly[i];
  		var p1 = poly[(i + 1) % len];
  		area += p0.x * p1.y - p1.x * p0.y;
  	}
  	area = .5 * area;
  	return area;
  };
  hxGeomAlgo_PolyTools.meet = function(p,q) {
  	return new hxGeomAlgo_HomogCoord(p.y - q.y,q.x - p.x,p.x * q.y - p.y * q.x);
  };
  hxGeomAlgo_PolyTools.dot = function(p,q) {
  	return p.x * q.x + p.y * q.y;
  };
  hxGeomAlgo_PolyTools.sqr = function(x) {
  	return x * x;
  };
  hxGeomAlgo_PolyTools.eq = function(a,b) {
  	return Math.abs(a - b) <= hxGeomAlgo_PolyTools.EPSILON;
  };
  hxGeomAlgo_PolyTools.clear = function(array) {
  	array.length = 0;
  };
  hxGeomAlgo_PolyTools.toFloatArray = function(poly,out) {
  	if(out == null) {
  		out = [];
  	}
  	var _g = 0;
  	while(_g < poly.length) {
  		var p = poly[_g];
  		++_g;
  		out.push(p.x);
  		out.push(p.y);
  	}
  	return out;
  };
  hxGeomAlgo_PolyTools.reverseFloatArray = function(poly,inPlace) {
  	if(inPlace == null) {
  		inPlace = false;
  	}
  	var res = inPlace ? poly : [];
  	var nPoints = poly.length >> 1;
  	var _g = 0;
  	var _g1 = nPoints;
  	while(_g < _g1) {
  		var i = _g++;
  		var xPos = (nPoints - i - 1) * 2;
  		res[i * 2] = poly[xPos];
  		res[i * 2 + 1] = poly[xPos + 1];
  	}
  	return res;
  };
  hxGeomAlgo_PolyTools.flatten = function(array,out) {
  	var res = out != null ? out : [];
  	var _g = 0;
  	while(_g < array.length) {
  		var arr = array[_g];
  		++_g;
  		var _g1 = 0;
  		while(_g1 < arr.length) {
  			var item = arr[_g1];
  			++_g1;
  			res.push(item);
  		}
  	}
  	return res;
  };
  hxGeomAlgo_PolyTools.toPointArray = function(poly,out) {
  	if(out == null) {
  		out = [];
  	}
  	var size = poly.length;
  	if(poly.length % 2 == 1) {
  		--size;
  	}
  	var _g = 0;
  	var _g1 = size >> 1;
  	while(_g < _g1) {
  		var i = _g++;
  		out.push(hxGeomAlgo_HxPoint._new(poly[i * 2],poly[i * 2 + 1]));
  	}
  	return out;
  };
  hxGeomAlgo_PolyTools.inflateLine = function(start,end,thickness) {
  	var halfWidth = thickness / 2;
  	var dx = end.x - start.x;
  	var dy = end.y - start.y;
  	var len = Math.sqrt(dx * dx + dy * dy);
  	var nx = dx / len * halfWidth;
  	var ny = dy / len * halfWidth;
  	return [hxGeomAlgo_HxPoint._new(start.x - ny,start.y + nx),hxGeomAlgo_HxPoint._new(end.x - ny,end.y + nx),hxGeomAlgo_HxPoint._new(end.x + ny,end.y - nx),hxGeomAlgo_HxPoint._new(start.x + ny,start.y - nx)];
  };
  hxGeomAlgo_PolyTools.clip = function(subjPoly,clipPoly) {
  	var cond = clipPoly.length >= 3 && hxGeomAlgo_PolyTools.isConvex(clipPoly);
  	var res = [];
  	var output = subjPoly;
  	var isInside = hxGeomAlgo_PolyTools.isCCW(clipPoly) ? hxGeomAlgo_PolyTools.isRight : hxGeomAlgo_PolyTools.isLeft;
  	var clipEdgeStart;
  	var clipEdgeEnd;
  	var inputEdgeStart;
  	var inputEdgeEnd;
  	var clipLen = clipPoly.length;
  	var i = 0;
  	var _g = 0;
  	var _g1 = clipLen;
  	while(_g < _g1) {
  		var i = _g++;
  		clipEdgeStart = clipPoly[i];
  		var idx = i + 1;
  		var len = clipPoly.length;
  		if(idx < 0) {
  			idx += len;
  		}
  		clipEdgeEnd = clipPoly[idx % len];
  		var input = output;
  		output = [];
  		inputEdgeStart = input[input.length - 1];
  		var _g2 = 0;
  		var _g3 = input.length;
  		while(_g2 < _g3) {
  			var j = _g2++;
  			inputEdgeEnd = input[j];
  			if(isInside(inputEdgeEnd,clipEdgeStart,clipEdgeEnd)) {
  				if(!isInside(inputEdgeStart,clipEdgeStart,clipEdgeEnd)) {
  					var intersectionPoint = hxGeomAlgo_PolyTools.intersection(inputEdgeStart,inputEdgeEnd,clipEdgeStart,clipEdgeEnd);
  					if(intersectionPoint != null) {
  						output.push(intersectionPoint);
  					}
  				}
  				output.push(inputEdgeEnd);
  			} else if(isInside(inputEdgeStart,clipEdgeStart,clipEdgeEnd)) {
  				var intersectionPoint1 = hxGeomAlgo_PolyTools.intersection(inputEdgeStart,inputEdgeEnd,clipEdgeStart,clipEdgeEnd);
  				if(intersectionPoint1 != null) {
  					output.push(intersectionPoint1);
  				}
  			}
  			inputEdgeStart = inputEdgeEnd;
  		}
  		res.push(output);
  	}
  	return res;
  };
  hxGeomAlgo_PolyTools.exposeEnum = function(enumClass,as) {
  	var dotPath = (as != null ? as : enumClass.__ename__).split(".");
  	var exports = $hx_exports;
  	var i = 0;
  	while(i < dotPath.length - 1) {
  		var currPath = dotPath[i];
  		exports[currPath] = exports[currPath] || { };
  		exports = exports[currPath];
  		++i;
  	}
  	exports[dotPath[i]] = enumClass;
  };
  var hxGeomAlgo_WindingRule = $hxEnums["hxGeomAlgo.WindingRule"] = { __ename__ : "hxGeomAlgo.WindingRule", __constructs__ : ["ODD","NON_ZERO","POSITIVE","NEGATIVE","ABS_GEQ_TWO"]
  	,ODD: {_hx_index:0,__enum__:"hxGeomAlgo.WindingRule",toString:$estr}
  	,NON_ZERO: {_hx_index:1,__enum__:"hxGeomAlgo.WindingRule",toString:$estr}
  	,POSITIVE: {_hx_index:2,__enum__:"hxGeomAlgo.WindingRule",toString:$estr}
  	,NEGATIVE: {_hx_index:3,__enum__:"hxGeomAlgo.WindingRule",toString:$estr}
  	,ABS_GEQ_TWO: {_hx_index:4,__enum__:"hxGeomAlgo.WindingRule",toString:$estr}
  };
  var hxGeomAlgo_ResultType = $hxEnums["hxGeomAlgo.ResultType"] = { __ename__ : "hxGeomAlgo.ResultType", __constructs__ : ["POLYGONS","CONNECTED_POLYGONS","BOUNDARY_CONTOURS","EXPERIMENTAL_DELAUNAY"]
  	,POLYGONS: {_hx_index:0,__enum__:"hxGeomAlgo.ResultType",toString:$estr}
  	,CONNECTED_POLYGONS: {_hx_index:1,__enum__:"hxGeomAlgo.ResultType",toString:$estr}
  	,BOUNDARY_CONTOURS: {_hx_index:2,__enum__:"hxGeomAlgo.ResultType",toString:$estr}
  	,EXPERIMENTAL_DELAUNAY: {_hx_index:3,__enum__:"hxGeomAlgo.ResultType",toString:$estr}
  };
  var hxGeomAlgo_Tess2 = $hx_exports["hxGeomAlgo"]["Tess2"] = function() { };
  hxGeomAlgo_Tess2.__name__ = true;
  hxGeomAlgo_Tess2.tesselate = function(contours,windingRule,resultType,polySize,vertexDim,normal) {
  	if(vertexDim == null) {
  		vertexDim = 2;
  	}
  	if(polySize == null) {
  		polySize = 3;
  	}
  	var tess = new hxGeomAlgo_Tesselator();
  	var _g = 0;
  	var _g1 = contours.length;
  	while(_g < _g1) {
  		var i = _g++;
  		tess.addContour(vertexDim,contours[i]);
  	}
  	tess.tesselate(windingRule == null ? hxGeomAlgo_WindingRule.ODD : windingRule,resultType == null ? hxGeomAlgo_ResultType.POLYGONS : resultType,polySize,vertexDim,normal == null ? [0,0,1] : normal);
  	return { vertices : tess.vertices, vertexIndices : tess.vertexIndices, vertexCount : tess.vertexCount, elements : tess.elements, elementCount : tess.elementCount};
  };
  hxGeomAlgo_Tess2.union = function(contoursA,contoursB,resultType,polySize,vertexDim) {
  	if(vertexDim == null) {
  		vertexDim = 2;
  	}
  	if(polySize == null) {
  		polySize = 3;
  	}
  	var contours = contoursA.concat(contoursB);
  	return hxGeomAlgo_Tess2.tesselate(contours,hxGeomAlgo_WindingRule.NON_ZERO,resultType,polySize,vertexDim);
  };
  hxGeomAlgo_Tess2.intersection = function(contoursA,contoursB,resultType,polySize,vertexDim) {
  	if(vertexDim == null) {
  		vertexDim = 2;
  	}
  	if(polySize == null) {
  		polySize = 3;
  	}
  	var contours = contoursA.concat(contoursB);
  	return hxGeomAlgo_Tess2.tesselate(contours,hxGeomAlgo_WindingRule.ABS_GEQ_TWO,resultType,polySize,vertexDim);
  };
  hxGeomAlgo_Tess2.difference = function(contoursA,contoursB,resultType,polySize,vertexDim) {
  	if(vertexDim == null) {
  		vertexDim = 2;
  	}
  	if(polySize == null) {
  		polySize = 3;
  	}
  	var _g = [];
  	var _g1 = 0;
  	while(_g1 < contoursB.length) {
  		var poly = contoursB[_g1];
  		++_g1;
  		_g.push(hxGeomAlgo_PolyTools.reverseFloatArray(poly));
  	}
  	var diffB = _g;
  	var contours = contoursA.concat(diffB);
  	return hxGeomAlgo_Tess2.tesselate(contours,hxGeomAlgo_WindingRule.POSITIVE,resultType,polySize,vertexDim);
  };
  hxGeomAlgo_Tess2.convertResult = function(vertices,elements,resultType,polySize,out) {
  	if(out == null) {
  		out = [];
  	}
  	var tmp = resultType._hx_index != 2;
  	var i = 0;
  	switch(resultType._hx_index) {
  	case 1:
  		while(i < elements.length) {
  			var poly = [];
  			var _g = 0;
  			var _g1 = polySize;
  			while(_g < _g1) {
  				var j = _g++;
  				var idx = elements[i + j];
  				if(idx == -1) {
  					continue;
  				}
  				poly.push(hxGeomAlgo_HxPoint._new(vertices[idx * 2],vertices[idx * 2 + 1]));
  			}
  			out.push(poly);
  			i += polySize * 2;
  		}
  		break;
  	case 2:
  		while(i < elements.length) {
  			var poly = [];
  			var start = elements[i];
  			var count = elements[i + 1];
  			var _g = 0;
  			var _g1 = count;
  			while(_g < _g1) {
  				var j = _g++;
  				var idx = start + j;
  				poly.push(hxGeomAlgo_HxPoint._new(vertices[idx * 2],vertices[idx * 2 + 1]));
  			}
  			out.push(poly);
  			i += 2;
  		}
  		break;
  	case 0:case 3:
  		while(i < elements.length) {
  			var poly = [];
  			var _g = 0;
  			var _g1 = polySize;
  			while(_g < _g1) {
  				var j = _g++;
  				var idx = elements[i + j];
  				if(idx == -1) {
  					continue;
  				}
  				poly.push(hxGeomAlgo_HxPoint._new(vertices[idx * 2],vertices[idx * 2 + 1]));
  			}
  			out.push(poly);
  			i += polySize;
  		}
  		break;
  	}
  	return out;
  };
  var hxGeomAlgo__$Tess2_TessVertex = function() {
  	this.idx = 0;
  	this.n = 0;
  	this.pqHandle = 0;
  	this.t = 0.0;
  	this.s = 0.0;
  	this.coords = [0,0,0];
  	this.anEdge = null;
  	this.prev = null;
  	this.next = null;
  };
  hxGeomAlgo__$Tess2_TessVertex.__name__ = true;
  hxGeomAlgo__$Tess2_TessVertex.prototype = {
  	__class__: hxGeomAlgo__$Tess2_TessVertex
  };
  var hxGeomAlgo__$Tess2_TessFace = function() {
  	this.inside = false;
  	this.marked = false;
  	this.n = 0;
  	this.trail = null;
  	this.anEdge = null;
  	this.prev = null;
  	this.next = null;
  };
  hxGeomAlgo__$Tess2_TessFace.__name__ = true;
  hxGeomAlgo__$Tess2_TessFace.prototype = {
  	__class__: hxGeomAlgo__$Tess2_TessFace
  };
  var hxGeomAlgo__$Tess2_TessHalfEdge = function(side) {
  	this.winding = 0;
  	this.activeRegion = null;
  	this.Lface = null;
  	this.Org = null;
  	this.Lnext = null;
  	this.Onext = null;
  	this.Sym = null;
  	this.next = null;
  	this.side = side;
  };
  hxGeomAlgo__$Tess2_TessHalfEdge.__name__ = true;
  hxGeomAlgo__$Tess2_TessHalfEdge.prototype = {
  	get_Rface: function() {
  		return this.Sym.Lface;
  	}
  	,set_Rface: function(v) {
  		return this.Sym.Lface = v;
  	}
  	,get_Dst: function() {
  		return this.Sym.Org;
  	}
  	,set_Dst: function(v) {
  		return this.Sym.Org = v;
  	}
  	,get_Oprev: function() {
  		return this.Sym.Lnext;
  	}
  	,get_Lprev: function() {
  		return this.Onext.Sym;
  	}
  	,get_Rprev: function() {
  		return this.Sym.Onext;
  	}
  	,get_Dnext: function() {
  		return this.Sym.Onext.Sym;
  	}
  	,__class__: hxGeomAlgo__$Tess2_TessHalfEdge
  };
  var hxGeomAlgo__$Tess2_TessMesh = function() {
  	this.eSym = new hxGeomAlgo__$Tess2_TessHalfEdge(1);
  	this.e = new hxGeomAlgo__$Tess2_TessHalfEdge(0);
  	this.f = new hxGeomAlgo__$Tess2_TessFace();
  	this.v = new hxGeomAlgo__$Tess2_TessVertex();
  	this.v.next = this.v.prev = this.v;
  	this.v.anEdge = null;
  	this.f.next = this.f.prev = this.f;
  	this.f.anEdge = null;
  	this.f.trail = null;
  	this.f.marked = false;
  	this.f.inside = false;
  	this.e.next = this.e;
  	this.e.Sym = this.eSym;
  	this.e.Onext = null;
  	this.e.Lnext = null;
  	this.e.Org = null;
  	this.e.Lface = null;
  	this.e.winding = 0;
  	this.e.activeRegion = null;
  	this.e.mark = false;
  	this.eSym.next = this.eSym;
  	this.eSym.Sym = this.e;
  	this.eSym.Onext = null;
  	this.eSym.Lnext = null;
  	this.eSym.Org = null;
  	this.eSym.Lface = null;
  	this.eSym.winding = 0;
  	this.eSym.activeRegion = null;
  	this.e.Sym.mark = false;
  	this.vHead = this.v;
  	this.fHead = this.f;
  	this.eHead = this.e;
  	this.eHeadSym = this.eSym;
  };
  hxGeomAlgo__$Tess2_TessMesh.__name__ = true;
  hxGeomAlgo__$Tess2_TessMesh.flipEdge = function(mesh,edge) {
  	var a0 = edge;
  	var a1 = a0.Lnext;
  	var a2 = a1.Lnext;
  	var b0 = edge.Sym;
  	var b1 = b0.Lnext;
  	var b2 = b1.Lnext;
  	var aOrg = a0.Org;
  	var aOpp = a2.Org;
  	var bOrg = b0.Org;
  	var bOpp = b2.Org;
  	var fa = a0.Lface;
  	var fb = b0.Lface;
  	var cond = hxGeomAlgo__$Tess2_Geom.edgeIsInternal(edge);
  	a0.Org = bOpp;
  	a0.Onext = b1.Sym;
  	b0.Org = aOpp;
  	b0.Onext = a1.Sym;
  	a2.Onext = b0;
  	b2.Onext = a0;
  	b1.Onext = a2.Sym;
  	a1.Onext = b2.Sym;
  	a0.Lnext = a2;
  	a2.Lnext = b1;
  	b1.Lnext = a0;
  	b0.Lnext = b2;
  	b2.Lnext = a1;
  	a1.Lnext = b0;
  	a1.Lface = fb;
  	b1.Lface = fa;
  	fa.anEdge = a0;
  	fb.anEdge = b0;
  	if(aOrg.anEdge == a0) {
  		aOrg.anEdge = b1;
  	}
  	if(bOrg.anEdge == b0) {
  		bOrg.anEdge = a1;
  	}
  	var cond = a0.get_Oprev().Onext.Org == a0.Org;
  };
  hxGeomAlgo__$Tess2_TessMesh.prototype = {
  	makeEdge_: function(eNext) {
  		var e = new hxGeomAlgo__$Tess2_TessHalfEdge(0);
  		var eSym = new hxGeomAlgo__$Tess2_TessHalfEdge(1);
  		if(eNext.Sym.side < eNext.side) {
  			eNext = eNext.Sym;
  		}
  		var ePrev = eNext.Sym.next;
  		eSym.next = ePrev;
  		ePrev.Sym.next = e;
  		e.next = eNext;
  		eNext.Sym.next = eSym;
  		e.Sym = eSym;
  		e.Onext = e;
  		e.Lnext = eSym;
  		e.Org = null;
  		e.Lface = null;
  		e.winding = 0;
  		e.activeRegion = null;
  		eSym.Sym = e;
  		eSym.Onext = eSym;
  		eSym.Lnext = e;
  		eSym.Org = null;
  		eSym.Lface = null;
  		eSym.winding = 0;
  		eSym.activeRegion = null;
  		return e;
  	}
  	,splice_: function(a,b) {
  		var aOnext = a.Onext;
  		var bOnext = b.Onext;
  		aOnext.Sym.Lnext = b;
  		bOnext.Sym.Lnext = a;
  		a.Onext = bOnext;
  		b.Onext = aOnext;
  	}
  	,makeVertex_: function(newVertex,eOrig,vNext) {
  		var vNew = newVertex;
  		var vPrev = vNext.prev;
  		vNew.prev = vPrev;
  		vPrev.next = vNew;
  		vNew.next = vNext;
  		vNext.prev = vNew;
  		vNew.anEdge = eOrig;
  		var e = eOrig;
  		while(true) {
  			e.Org = vNew;
  			e = e.Onext;
  			if(!(e != eOrig)) {
  				break;
  			}
  		}
  	}
  	,makeFace_: function(newFace,eOrig,fNext) {
  		var fNew = newFace;
  		var fPrev = fNext.prev;
  		fNew.prev = fPrev;
  		fPrev.next = fNew;
  		fNew.next = fNext;
  		fNext.prev = fNew;
  		fNew.anEdge = eOrig;
  		fNew.trail = null;
  		fNew.marked = false;
  		fNew.inside = fNext.inside;
  		var e = eOrig;
  		while(true) {
  			e.Lface = fNew;
  			e = e.Lnext;
  			if(!(e != eOrig)) {
  				break;
  			}
  		}
  	}
  	,killEdge_: function(eDel) {
  		if(eDel.Sym.side < eDel.side) {
  			eDel = eDel.Sym;
  		}
  		var eNext = eDel.next;
  		var ePrev = eDel.Sym.next;
  		eNext.Sym.next = ePrev;
  		ePrev.Sym.next = eNext;
  	}
  	,killVertex_: function(vDel,newOrg) {
  		var eStart = vDel.anEdge;
  		var e = eStart;
  		while(true) {
  			e.Org = newOrg;
  			e = e.Onext;
  			if(!(e != eStart)) {
  				break;
  			}
  		}
  		var vPrev = vDel.prev;
  		var vNext = vDel.next;
  		vNext.prev = vPrev;
  		vPrev.next = vNext;
  	}
  	,killFace_: function(fDel,newLface) {
  		var eStart = fDel.anEdge;
  		var e = eStart;
  		while(true) {
  			e.Lface = newLface;
  			e = e.Lnext;
  			if(!(e != eStart)) {
  				break;
  			}
  		}
  		var fPrev = fDel.prev;
  		var fNext = fDel.next;
  		fNext.prev = fPrev;
  		fPrev.next = fNext;
  	}
  	,makeEdge: function() {
  		var newVertex1 = new hxGeomAlgo__$Tess2_TessVertex();
  		var newVertex2 = new hxGeomAlgo__$Tess2_TessVertex();
  		var newFace = new hxGeomAlgo__$Tess2_TessFace();
  		var e = this.makeEdge_(this.eHead);
  		this.makeVertex_(newVertex1,e,this.vHead);
  		this.makeVertex_(newVertex2,e.Sym,this.vHead);
  		this.makeFace_(newFace,e,this.fHead);
  		return e;
  	}
  	,splice: function(eOrg,eDst) {
  		var joiningLoops = false;
  		var joiningVertices = false;
  		if(eOrg == eDst) {
  			return;
  		}
  		if(eDst.Org != eOrg.Org) {
  			joiningVertices = true;
  			this.killVertex_(eDst.Org,eOrg.Org);
  		}
  		if(eDst.Lface != eOrg.Lface) {
  			joiningLoops = true;
  			this.killFace_(eDst.Lface,eOrg.Lface);
  		}
  		this.splice_(eDst,eOrg);
  		if(!joiningVertices) {
  			var newVertex = new hxGeomAlgo__$Tess2_TessVertex();
  			this.makeVertex_(newVertex,eDst,eOrg.Org);
  			eOrg.Org.anEdge = eOrg;
  		}
  		if(!joiningLoops) {
  			var newFace = new hxGeomAlgo__$Tess2_TessFace();
  			this.makeFace_(newFace,eDst,eOrg.Lface);
  			eOrg.Lface.anEdge = eOrg;
  		}
  	}
  	,'delete': function(eDel) {
  		var eDelSym = eDel.Sym;
  		var joiningLoops = false;
  		if(eDel.Lface != eDel.get_Rface()) {
  			joiningLoops = true;
  			this.killFace_(eDel.Lface,eDel.get_Rface());
  		}
  		if(eDel.Onext == eDel) {
  			this.killVertex_(eDel.Org,null);
  		} else {
  			eDel.get_Rface().anEdge = eDel.get_Oprev();
  			eDel.Org.anEdge = eDel.Onext;
  			this.splice_(eDel,eDel.get_Oprev());
  			if(!joiningLoops) {
  				var newFace = new hxGeomAlgo__$Tess2_TessFace();
  				this.makeFace_(newFace,eDel,eDel.Lface);
  			}
  		}
  		if(eDelSym.Onext == eDelSym) {
  			this.killVertex_(eDelSym.Org,null);
  			this.killFace_(eDelSym.Lface,null);
  		} else {
  			eDel.Lface.anEdge = eDelSym.get_Oprev();
  			eDelSym.Org.anEdge = eDelSym.Onext;
  			this.splice_(eDelSym,eDelSym.get_Oprev());
  		}
  		this.killEdge_(eDel);
  	}
  	,addEdgeVertex: function(eOrg) {
  		var eNew = this.makeEdge_(eOrg);
  		var eNewSym = eNew.Sym;
  		this.splice_(eNew,eOrg.Lnext);
  		eNew.Org = eOrg.get_Dst();
  		var newVertex = new hxGeomAlgo__$Tess2_TessVertex();
  		this.makeVertex_(newVertex,eNewSym,eNew.Org);
  		eNew.Lface = eNewSym.Lface = eOrg.Lface;
  		return eNew;
  	}
  	,splitEdge: function(eOrg) {
  		var tempHalfEdge = this.addEdgeVertex(eOrg);
  		var eNew = tempHalfEdge.Sym;
  		this.splice_(eOrg.Sym,eOrg.Sym.get_Oprev());
  		this.splice_(eOrg.Sym,eNew);
  		eOrg.set_Dst(eNew.Org);
  		eNew.get_Dst().anEdge = eNew.Sym;
  		eNew.set_Rface(eOrg.get_Rface());
  		eNew.winding = eOrg.winding;
  		eNew.Sym.winding = eOrg.Sym.winding;
  		return eNew;
  	}
  	,connect: function(eOrg,eDst) {
  		var joiningLoops = false;
  		var eNew = this.makeEdge_(eOrg);
  		var eNewSym = eNew.Sym;
  		if(eDst.Lface != eOrg.Lface) {
  			joiningLoops = true;
  			this.killFace_(eDst.Lface,eOrg.Lface);
  		}
  		this.splice_(eNew,eOrg.Lnext);
  		this.splice_(eNewSym,eDst);
  		eNew.Org = eOrg.get_Dst();
  		eNewSym.Org = eDst.Org;
  		eNew.Lface = eNewSym.Lface = eOrg.Lface;
  		eOrg.Lface.anEdge = eNewSym;
  		if(!joiningLoops) {
  			var newFace = new hxGeomAlgo__$Tess2_TessFace();
  			this.makeFace_(newFace,eNew,eOrg.Lface);
  		}
  		return eNew;
  	}
  	,zapFace: function(fZap) {
  		var eStart = fZap.anEdge;
  		var e;
  		var eSym;
  		var eNext = eStart.Lnext;
  		while(true) {
  			e = eNext;
  			eNext = e.Lnext;
  			e.Lface = null;
  			if(e.get_Rface() == null) {
  				if(e.Onext == e) {
  					this.killVertex_(e.Org,null);
  				} else {
  					e.Org.anEdge = e.Onext;
  					this.splice_(e,e.get_Oprev());
  				}
  				eSym = e.Sym;
  				if(eSym.Onext == eSym) {
  					this.killVertex_(eSym.Org,null);
  				} else {
  					eSym.Org.anEdge = eSym.Onext;
  					this.splice_(eSym,eSym.get_Oprev());
  				}
  				this.killEdge_(e);
  			}
  			if(!(e != eStart)) {
  				break;
  			}
  		}
  		var fPrev = fZap.prev;
  		var fNext = fZap.next;
  		fNext.prev = fPrev;
  		fPrev.next = fNext;
  	}
  	,countFaceVerts_: function(f) {
  		var eCur = f.anEdge;
  		var n = 0;
  		while(true) {
  			++n;
  			eCur = eCur.Lnext;
  			if(!(eCur != f.anEdge)) {
  				break;
  			}
  		}
  		return n;
  	}
  	,mergeConvexFaces: function(maxVertsPerFace) {
  		var eCur;
  		var eNext;
  		var eSym;
  		var vStart;
  		var curNv;
  		var symNv;
  		var f = this.fHead.next;
  		while(f != this.fHead) {
  			if(!f.inside) {
  				f = f.next;
  				continue;
  			}
  			eCur = f.anEdge;
  			vStart = eCur.Org;
  			while(true) {
  				eNext = eCur.Lnext;
  				eSym = eCur.Sym;
  				if(eSym != null && eSym.Lface != null && eSym.Lface.inside) {
  					curNv = this.countFaceVerts_(f);
  					symNv = this.countFaceVerts_(eSym.Lface);
  					if(curNv + symNv - 2 <= maxVertsPerFace) {
  						if(hxGeomAlgo__$Tess2_Geom.vertCCW(eCur.get_Lprev().Org,eCur.Org,eSym.Lnext.Lnext.Org) && hxGeomAlgo__$Tess2_Geom.vertCCW(eSym.get_Lprev().Org,eSym.Org,eCur.Lnext.Lnext.Org)) {
  							eNext = eSym.Lnext;
  							this.delete(eSym);
  							eCur = null;
  							eSym = null;
  						}
  					}
  				}
  				if(eCur != null && eCur.Lnext.Org == vStart) {
  					break;
  				}
  				eCur = eNext;
  			}
  			f = f.next;
  		}
  		return true;
  	}
  	,check: function() {
  		var fHead = this.fHead;
  		var vHead = this.vHead;
  		var eHead = this.eHead;
  		var f;
  		var v;
  		var e;
  		var fPrev = fHead;
  		while(true) {
  			f = fPrev.next;
  			if(!(f != fHead)) {
  				break;
  			}
  			e = f.anEdge;
  			while(true) {
  				e = e.Lnext;
  				if(!(e != f.anEdge)) {
  					break;
  				}
  			}
  			fPrev = f;
  		}
  		var vPrev = vHead;
  		while(true) {
  			v = vPrev.next;
  			if(!(v != vHead)) {
  				break;
  			}
  			e = v.anEdge;
  			while(true) {
  				e = e.Onext;
  				if(!(e != v.anEdge)) {
  					break;
  				}
  			}
  			vPrev = v;
  		}
  		var ePrev = eHead;
  		while(true) {
  			e = ePrev.next;
  			if(!(e != eHead)) {
  				break;
  			}
  			var cond = e.get_Dst() != null;
  			ePrev = e;
  		}
  		var cond = e.Sym.next == ePrev.Sym && e.Sym == this.eHeadSym && e.Sym.Sym == e && e.Org == null && e.get_Dst() == null && e.Lface == null && e.get_Rface() == null;
  	}
  	,__class__: hxGeomAlgo__$Tess2_TessMesh
  };
  var hxGeomAlgo__$Tess2_Geom = function() { };
  hxGeomAlgo__$Tess2_Geom.__name__ = true;
  hxGeomAlgo__$Tess2_Geom.vertEq = function(u,v) {
  	if(u.s == v.s) {
  		return u.t == v.t;
  	} else {
  		return false;
  	}
  };
  hxGeomAlgo__$Tess2_Geom.vertLeq = function(u,v) {
  	if(!(u.s < v.s)) {
  		if(u.s == v.s) {
  			return u.t <= v.t;
  		} else {
  			return false;
  		}
  	} else {
  		return true;
  	}
  };
  hxGeomAlgo__$Tess2_Geom.transLeq = function(u,v) {
  	if(!(u.t < v.t)) {
  		if(u.t == v.t) {
  			return u.s <= v.s;
  		} else {
  			return false;
  		}
  	} else {
  		return true;
  	}
  };
  hxGeomAlgo__$Tess2_Geom.edgeGoesLeft = function(e) {
  	return hxGeomAlgo__$Tess2_Geom.vertLeq(e.get_Dst(),e.Org);
  };
  hxGeomAlgo__$Tess2_Geom.edgeGoesRight = function(e) {
  	return hxGeomAlgo__$Tess2_Geom.vertLeq(e.Org,e.get_Dst());
  };
  hxGeomAlgo__$Tess2_Geom.edgeIsInternal = function(e) {
  	if(e.get_Rface() != null) {
  		return e.get_Rface().inside;
  	} else {
  		return false;
  	}
  };
  hxGeomAlgo__$Tess2_Geom.vertL1dist = function(u,v) {
  	return Math.abs(u.s - v.s) + Math.abs(u.t - v.t);
  };
  hxGeomAlgo__$Tess2_Geom.edgeEval = function(u,v,w) {
  	var cond = hxGeomAlgo__$Tess2_Geom.vertLeq(u,v) && hxGeomAlgo__$Tess2_Geom.vertLeq(v,w);
  	var gapL = v.s - u.s;
  	var gapR = w.s - v.s;
  	if(gapL + gapR > 0.0) {
  		if(gapL < gapR) {
  			return v.t - u.t + (u.t - w.t) * (gapL / (gapL + gapR));
  		} else {
  			return v.t - w.t + (w.t - u.t) * (gapR / (gapL + gapR));
  		}
  	}
  	return 0.0;
  };
  hxGeomAlgo__$Tess2_Geom.edgeSign = function(u,v,w) {
  	var cond = hxGeomAlgo__$Tess2_Geom.vertLeq(u,v) && hxGeomAlgo__$Tess2_Geom.vertLeq(v,w);
  	var gapL = v.s - u.s;
  	var gapR = w.s - v.s;
  	if(gapL + gapR > 0.0) {
  		return (v.t - w.t) * gapL + (v.t - u.t) * gapR;
  	}
  	return 0.0;
  };
  hxGeomAlgo__$Tess2_Geom.transEval = function(u,v,w) {
  	var cond = hxGeomAlgo__$Tess2_Geom.transLeq(u,v) && hxGeomAlgo__$Tess2_Geom.transLeq(v,w);
  	var gapL = v.t - u.t;
  	var gapR = w.t - v.t;
  	if(gapL + gapR > 0.0) {
  		if(gapL < gapR) {
  			return v.s - u.s + (u.s - w.s) * (gapL / (gapL + gapR));
  		} else {
  			return v.s - w.s + (w.s - u.s) * (gapR / (gapL + gapR));
  		}
  	}
  	return 0.0;
  };
  hxGeomAlgo__$Tess2_Geom.transSign = function(u,v,w) {
  	var cond = hxGeomAlgo__$Tess2_Geom.transLeq(u,v) && hxGeomAlgo__$Tess2_Geom.transLeq(v,w);
  	var gapL = v.t - u.t;
  	var gapR = w.t - v.t;
  	if(gapL + gapR > 0.0) {
  		return (v.s - w.s) * gapL + (v.s - u.s) * gapR;
  	}
  	return 0.0;
  };
  hxGeomAlgo__$Tess2_Geom.vertCCW = function(u,v,w) {
  	return u.s * (v.t - w.t) + v.s * (w.t - u.t) + w.s * (u.t - v.t) >= 0.0;
  };
  hxGeomAlgo__$Tess2_Geom.interpolate = function(a,x,b,y) {
  	if(a < 0) {
  		a = 0;
  	}
  	if(b < 0) {
  		b = 0;
  	}
  	if(a <= b) {
  		if(b == 0) {
  			return (x + y) / 2;
  		} else {
  			return x + (y - x) * (a / (a + b));
  		}
  	} else {
  		return y + (x - y) * (b / (a + b));
  	}
  };
  hxGeomAlgo__$Tess2_Geom.intersect = function(o1,d1,o2,d2,v) {
  	var z1;
  	var z2;
  	var t;
  	if(!hxGeomAlgo__$Tess2_Geom.vertLeq(o1,d1)) {
  		t = o1;
  		o1 = d1;
  		d1 = t;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.vertLeq(o2,d2)) {
  		t = o2;
  		o2 = d2;
  		d2 = t;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.vertLeq(o1,o2)) {
  		t = o1;
  		o1 = o2;
  		o2 = t;
  		t = d1;
  		d1 = d2;
  		d2 = t;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.vertLeq(o2,d1)) {
  		v.s = (o2.s + d1.s) / 2;
  	} else if(hxGeomAlgo__$Tess2_Geom.vertLeq(d1,d2)) {
  		z1 = hxGeomAlgo__$Tess2_Geom.edgeEval(o1,o2,d1);
  		z2 = hxGeomAlgo__$Tess2_Geom.edgeEval(o2,d1,d2);
  		if(z1 + z2 < 0) {
  			z1 = -z1;
  			z2 = -z2;
  		}
  		v.s = hxGeomAlgo__$Tess2_Geom.interpolate(z1,o2.s,z2,d1.s);
  	} else {
  		z1 = hxGeomAlgo__$Tess2_Geom.edgeSign(o1,o2,d1);
  		z2 = -hxGeomAlgo__$Tess2_Geom.edgeSign(o1,d2,d1);
  		if(z1 + z2 < 0) {
  			z1 = -z1;
  			z2 = -z2;
  		}
  		v.s = hxGeomAlgo__$Tess2_Geom.interpolate(z1,o2.s,z2,d2.s);
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.transLeq(o1,d1)) {
  		t = o1;
  		o1 = d1;
  		d1 = t;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.transLeq(o2,d2)) {
  		t = o2;
  		o2 = d2;
  		d2 = t;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.transLeq(o1,o2)) {
  		t = o1;
  		o1 = o2;
  		o2 = t;
  		t = d1;
  		d1 = d2;
  		d2 = t;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.transLeq(o2,d1)) {
  		v.t = (o2.t + d1.t) / 2;
  	} else if(hxGeomAlgo__$Tess2_Geom.transLeq(d1,d2)) {
  		z1 = hxGeomAlgo__$Tess2_Geom.transEval(o1,o2,d1);
  		z2 = hxGeomAlgo__$Tess2_Geom.transEval(o2,d1,d2);
  		if(z1 + z2 < 0) {
  			z1 = -z1;
  			z2 = -z2;
  		}
  		v.t = hxGeomAlgo__$Tess2_Geom.interpolate(z1,o2.t,z2,d1.t);
  	} else {
  		z1 = hxGeomAlgo__$Tess2_Geom.transSign(o1,o2,d1);
  		z2 = -hxGeomAlgo__$Tess2_Geom.transSign(o1,d2,d1);
  		if(z1 + z2 < 0) {
  			z1 = -z1;
  			z2 = -z2;
  		}
  		v.t = hxGeomAlgo__$Tess2_Geom.interpolate(z1,o2.t,z2,d2.t);
  	}
  };
  hxGeomAlgo__$Tess2_Geom.calcAngle = function(v0,v1,v2) {
  	var a_0 = v2.s - v1.s;
  	var a_1 = v2.t - v1.t;
  	var b_0 = v0.s - v1.s;
  	var b_1 = v0.t - v1.t;
  	var num = a_0 * b_0 + a_1 * b_1;
  	var den = Math.sqrt(a_0 * a_0 + a_1 * a_1) * Math.sqrt(b_0 * b_0 + b_1 * b_1);
  	if(den > 0.0) {
  		num /= den;
  	}
  	if(num < -1.0) {
  		num = -1.0;
  	}
  	if(num > 1.0) {
  		num = 1.0;
  	}
  	return Math.acos(num);
  };
  hxGeomAlgo__$Tess2_Geom.edgeIsLocallyDelaunay = function(e) {
  	return hxGeomAlgo__$Tess2_Geom.calcAngle(e.Lnext.Org,e.Lnext.Lnext.Org,e.Org) + hxGeomAlgo__$Tess2_Geom.calcAngle(e.Sym.Lnext.Org,e.Sym.Lnext.Lnext.Org,e.Sym.Org) < Math.PI + 0.01;
  };
  var hxGeomAlgo__$Tess2_DictNode = function() {
  	this.prev = null;
  	this.next = null;
  	this.key = null;
  };
  hxGeomAlgo__$Tess2_DictNode.__name__ = true;
  hxGeomAlgo__$Tess2_DictNode.prototype = {
  	__class__: hxGeomAlgo__$Tess2_DictNode
  };
  var hxGeomAlgo__$Tess2_Dict = function(frame,leq) {
  	this.head = new hxGeomAlgo__$Tess2_DictNode();
  	this.head.next = this.head;
  	this.head.prev = this.head;
  	this.frame = frame;
  	this.leq = leq;
  };
  hxGeomAlgo__$Tess2_Dict.__name__ = true;
  hxGeomAlgo__$Tess2_Dict.prototype = {
  	min: function() {
  		return this.head.next;
  	}
  	,insert: function(k) {
  		return this.insertBefore(this.head,k);
  	}
  	,search: function(key) {
  		var node = this.head;
  		while(true) {
  			node = node.next;
  			if(!(node.key != null && !this.leq(this.frame,key,node.key))) {
  				break;
  			}
  		}
  		return node;
  	}
  	,insertBefore: function(node,key) {
  		while(true) {
  			node = node.prev;
  			if(!(node.key != null && !this.leq(this.frame,node.key,key))) {
  				break;
  			}
  		}
  		var newNode = new hxGeomAlgo__$Tess2_DictNode();
  		newNode.key = key;
  		newNode.next = node.next;
  		node.next.prev = newNode;
  		newNode.prev = node;
  		node.next = newNode;
  		return newNode;
  	}
  	,'delete': function(node) {
  		node.next.prev = node.prev;
  		node.prev.next = node.next;
  	}
  	,__class__: hxGeomAlgo__$Tess2_Dict
  };
  var hxGeomAlgo__$Tess2_PQNode = function() {
  	this.handle = -1;
  };
  hxGeomAlgo__$Tess2_PQNode.__name__ = true;
  hxGeomAlgo__$Tess2_PQNode.prototype = {
  	__class__: hxGeomAlgo__$Tess2_PQNode
  };
  var hxGeomAlgo__$Tess2_PQHandleElem = function() {
  	this.node = -1;
  	this.key = null;
  };
  hxGeomAlgo__$Tess2_PQHandleElem.__name__ = true;
  hxGeomAlgo__$Tess2_PQHandleElem.prototype = {
  	__class__: hxGeomAlgo__$Tess2_PQHandleElem
  };
  var hxGeomAlgo__$Tess2_PriorityQ = function(size,leq) {
  	this.size = 0;
  	this.max = size;
  	this.nodes = [];
  	var _g = 0;
  	var _g1 = size + 1;
  	while(_g < _g1) {
  		var i = _g++;
  		this.nodes[i] = new hxGeomAlgo__$Tess2_PQNode();
  	}
  	this.handles = [];
  	var _g = 0;
  	var _g1 = size + 1;
  	while(_g < _g1) {
  		var i = _g++;
  		this.handles[i] = new hxGeomAlgo__$Tess2_PQHandleElem();
  	}
  	this.initialized = false;
  	this.freeList = 0;
  	this.leq = leq;
  	this.nodes[1].handle = 1;
  	this.handles[1].key = null;
  };
  hxGeomAlgo__$Tess2_PriorityQ.__name__ = true;
  hxGeomAlgo__$Tess2_PriorityQ.prototype = {
  	floatDown_: function(curr) {
  		var n = this.nodes;
  		var h = this.handles;
  		var hChild;
  		var child;
  		var hCurr = n[curr].handle;
  		while(true) {
  			child = curr << 1;
  			if(child < this.size && this.leq(h[n[child + 1].handle].key,h[n[child].handle].key)) {
  				++child;
  			}
  			hChild = n[child].handle;
  			if(child > this.size || this.leq(h[hCurr].key,h[hChild].key)) {
  				n[curr].handle = hCurr;
  				h[hCurr].node = curr;
  				break;
  			}
  			n[curr].handle = hChild;
  			h[hChild].node = curr;
  			curr = child;
  		}
  	}
  	,floatUp_: function(curr) {
  		var n = this.nodes;
  		var h = this.handles;
  		var hParent;
  		var parent;
  		var hCurr = n[curr].handle;
  		while(true) {
  			parent = curr >> 1;
  			hParent = n[parent].handle;
  			if(parent == 0 || this.leq(h[hParent].key,h[hCurr].key)) {
  				n[curr].handle = hCurr;
  				h[hCurr].node = curr;
  				break;
  			}
  			n[curr].handle = hParent;
  			h[hParent].node = curr;
  			curr = parent;
  		}
  	}
  	,init: function() {
  		var i = this.size;
  		while(i >= 1) {
  			this.floatDown_(i);
  			--i;
  		}
  		this.initialized = true;
  	}
  	,min: function() {
  		return this.handles[this.nodes[1].handle].key;
  	}
  	,insert: function(keyNew) {
  		var free;
  		var curr = ++this.size;
  		if(curr * 2 > this.max) {
  			this.max *= 2;
  			var s = this.nodes.length;
  			var _g = s;
  			var _g1 = this.max + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				this.nodes[i] = new hxGeomAlgo__$Tess2_PQNode();
  			}
  			s = this.handles.length;
  			var _g = this.handles.length;
  			var _g1 = this.max + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				this.handles[i] = new hxGeomAlgo__$Tess2_PQHandleElem();
  			}
  		}
  		if(this.freeList == 0) {
  			free = curr;
  		} else {
  			free = this.freeList;
  			this.freeList = this.handles[free].node;
  		}
  		this.nodes[curr].handle = free;
  		this.handles[free].node = curr;
  		this.handles[free].key = keyNew;
  		if(this.initialized) {
  			this.floatUp_(curr);
  		}
  		return free;
  	}
  	,extractMin: function() {
  		var n = this.nodes;
  		var h = this.handles;
  		var hMin = n[1].handle;
  		var min = h[hMin].key;
  		if(this.size > 0) {
  			n[1].handle = n[this.size].handle;
  			h[n[1].handle].node = 1;
  			h[hMin].key = null;
  			h[hMin].node = this.freeList;
  			this.freeList = hMin;
  			--this.size;
  			if(this.size > 0) {
  				this.floatDown_(1);
  			}
  		}
  		return min;
  	}
  	,'delete': function(hCurr) {
  		var n = this.nodes;
  		var h = this.handles;
  		var curr = h[hCurr].node;
  		n[curr].handle = n[this.size].handle;
  		h[n[curr].handle].node = curr;
  		--this.size;
  		if(curr <= this.size) {
  			if(curr <= 1 || this.leq(h[n[curr >> 1].handle].key,h[n[curr].handle].key)) {
  				this.floatDown_(curr);
  			} else {
  				this.floatUp_(curr);
  			}
  		}
  		h[hCurr].key = null;
  		h[hCurr].node = this.freeList;
  		this.freeList = hCurr;
  	}
  	,__class__: hxGeomAlgo__$Tess2_PriorityQ
  };
  var hxGeomAlgo__$Tess2_ActiveRegion = function() {
  	this.fixUpperEdge = false;
  	this.dirty = false;
  	this.sentinel = false;
  	this.inside = false;
  	this.windingNumber = 0;
  	this.nodeUp = null;
  	this.eUp = null;
  };
  hxGeomAlgo__$Tess2_ActiveRegion.__name__ = true;
  hxGeomAlgo__$Tess2_ActiveRegion.prototype = {
  	__class__: hxGeomAlgo__$Tess2_ActiveRegion
  };
  var hxGeomAlgo__$Tess2_Sweep = function() { };
  hxGeomAlgo__$Tess2_Sweep.__name__ = true;
  hxGeomAlgo__$Tess2_Sweep.regionBelow = function(r) {
  	return r.nodeUp.prev.key;
  };
  hxGeomAlgo__$Tess2_Sweep.regionAbove = function(r) {
  	return r.nodeUp.next.key;
  };
  hxGeomAlgo__$Tess2_Sweep.debugEvent = function(tess) {
  };
  hxGeomAlgo__$Tess2_Sweep.addWinding = function(eDst,eSrc) {
  	eDst.winding += eSrc.winding;
  	eDst.Sym.winding += eSrc.Sym.winding;
  };
  hxGeomAlgo__$Tess2_Sweep.edgeLeq = function(tess,reg1,reg2) {
  	var ev = tess.event;
  	var t1;
  	var t2;
  	var e1 = reg1.eUp;
  	var e2 = reg2.eUp;
  	if(e1.get_Dst() == ev) {
  		if(e2.get_Dst() == ev) {
  			if(hxGeomAlgo__$Tess2_Geom.vertLeq(e1.Org,e2.Org)) {
  				return hxGeomAlgo__$Tess2_Geom.edgeSign(e2.get_Dst(),e1.Org,e2.Org) <= 0;
  			}
  			return hxGeomAlgo__$Tess2_Geom.edgeSign(e1.get_Dst(),e2.Org,e1.Org) >= 0;
  		}
  		return hxGeomAlgo__$Tess2_Geom.edgeSign(e2.get_Dst(),ev,e2.Org) <= 0;
  	}
  	if(e2.get_Dst() == ev) {
  		return hxGeomAlgo__$Tess2_Geom.edgeSign(e1.get_Dst(),ev,e1.Org) >= 0;
  	}
  	var t1 = hxGeomAlgo__$Tess2_Geom.edgeEval(e1.get_Dst(),ev,e1.Org);
  	var t2 = hxGeomAlgo__$Tess2_Geom.edgeEval(e2.get_Dst(),ev,e2.Org);
  	return t1 >= t2;
  };
  hxGeomAlgo__$Tess2_Sweep.deleteRegion = function(tess,reg) {
  	var reg1 = reg.fixUpperEdge;
  	reg.eUp.activeRegion = null;
  	tess.dict.delete(reg.nodeUp);
  };
  hxGeomAlgo__$Tess2_Sweep.fixUpperEdge = function(tess,reg,newEdge) {
  	tess.mesh.delete(reg.eUp);
  	reg.fixUpperEdge = false;
  	reg.eUp = newEdge;
  	newEdge.activeRegion = reg;
  };
  hxGeomAlgo__$Tess2_Sweep.topLeftRegion = function(tess,reg) {
  	var org = reg.eUp.Org;
  	var e;
  	while(true) {
  		reg = hxGeomAlgo__$Tess2_Sweep.regionAbove(reg);
  		if(!(reg.eUp.Org == org)) {
  			break;
  		}
  	}
  	if(reg.fixUpperEdge) {
  		e = tess.mesh.connect(hxGeomAlgo__$Tess2_Sweep.regionBelow(reg).eUp.Sym,reg.eUp.Lnext);
  		if(e == null) {
  			return null;
  		}
  		hxGeomAlgo__$Tess2_Sweep.fixUpperEdge(tess,reg,e);
  		reg = hxGeomAlgo__$Tess2_Sweep.regionAbove(reg);
  	}
  	return reg;
  };
  hxGeomAlgo__$Tess2_Sweep.topRightRegion = function(reg) {
  	var dst = reg.eUp.get_Dst();
  	while(true) {
  		reg = hxGeomAlgo__$Tess2_Sweep.regionAbove(reg);
  		if(!(reg.eUp.get_Dst() == dst)) {
  			break;
  		}
  	}
  	return reg;
  };
  hxGeomAlgo__$Tess2_Sweep.addRegionBelow = function(tess,regAbove,eNewUp) {
  	var regNew = new hxGeomAlgo__$Tess2_ActiveRegion();
  	regNew.eUp = eNewUp;
  	regNew.nodeUp = tess.dict.insertBefore(regAbove.nodeUp,regNew);
  	regNew.fixUpperEdge = false;
  	regNew.sentinel = false;
  	regNew.dirty = false;
  	eNewUp.activeRegion = regNew;
  	return regNew;
  };
  hxGeomAlgo__$Tess2_Sweep.isWindingInside = function(tess,n) {
  	switch(tess.windingRule._hx_index) {
  	case 0:
  		return (n & 1) != 0;
  	case 1:
  		return n != 0;
  	case 2:
  		return n > 0;
  	case 3:
  		return n < 0;
  	case 4:
  		if(n < 2) {
  			return n <= -2;
  		} else {
  			return true;
  		}
  		break;
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.computeWinding = function(tess,reg) {
  	reg.windingNumber = hxGeomAlgo__$Tess2_Sweep.regionAbove(reg).windingNumber + reg.eUp.winding;
  	reg.inside = hxGeomAlgo__$Tess2_Sweep.isWindingInside(tess,reg.windingNumber);
  };
  hxGeomAlgo__$Tess2_Sweep.finishRegion = function(tess,reg) {
  	var e = reg.eUp;
  	var f = e.Lface;
  	f.inside = reg.inside;
  	f.anEdge = e;
  	hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,reg);
  };
  hxGeomAlgo__$Tess2_Sweep.finishLeftRegions = function(tess,regFirst,regLast) {
  	var e;
  	var ePrev;
  	var reg = null;
  	var regPrev = regFirst;
  	var ePrev = regFirst.eUp;
  	while(regPrev != regLast) {
  		regPrev.fixUpperEdge = false;
  		reg = hxGeomAlgo__$Tess2_Sweep.regionBelow(regPrev);
  		e = reg.eUp;
  		if(e.Org != ePrev.Org) {
  			if(!reg.fixUpperEdge) {
  				hxGeomAlgo__$Tess2_Sweep.finishRegion(tess,regPrev);
  				break;
  			}
  			e = tess.mesh.connect(ePrev.get_Lprev(),e.Sym);
  			hxGeomAlgo__$Tess2_Sweep.fixUpperEdge(tess,reg,e);
  		}
  		if(ePrev.Onext != e) {
  			tess.mesh.splice(e.get_Oprev(),e);
  			tess.mesh.splice(ePrev,e);
  		}
  		hxGeomAlgo__$Tess2_Sweep.finishRegion(tess,regPrev);
  		ePrev = reg.eUp;
  		regPrev = reg;
  	}
  	return ePrev;
  };
  hxGeomAlgo__$Tess2_Sweep.addRightEdges = function(tess,regUp,eFirst,eLast,eTopLeft,cleanUp) {
  	var reg = null;
  	var firstTime = true;
  	var e = eFirst;
  	while(true) {
  		var cond = hxGeomAlgo__$Tess2_Geom.vertLeq(e.Org,e.get_Dst());
  		hxGeomAlgo__$Tess2_Sweep.addRegionBelow(tess,regUp,e.Sym);
  		e = e.Onext;
  		if(!(e != eLast)) {
  			break;
  		}
  	}
  	if(eTopLeft == null) {
  		eTopLeft = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp).eUp.get_Rprev();
  	}
  	var regPrev = regUp;
  	var ePrev = eTopLeft;
  	while(true) {
  		reg = hxGeomAlgo__$Tess2_Sweep.regionBelow(regPrev);
  		e = reg.eUp.Sym;
  		if(e.Org != ePrev.Org) {
  			break;
  		}
  		if(e.Onext != ePrev) {
  			tess.mesh.splice(e.get_Oprev(),e);
  			tess.mesh.splice(ePrev.get_Oprev(),e);
  		}
  		reg.windingNumber = regPrev.windingNumber - e.winding;
  		reg.inside = hxGeomAlgo__$Tess2_Sweep.isWindingInside(tess,reg.windingNumber);
  		regPrev.dirty = true;
  		if(!firstTime && hxGeomAlgo__$Tess2_Sweep.checkForRightSplice(tess,regPrev)) {
  			hxGeomAlgo__$Tess2_Sweep.addWinding(e,ePrev);
  			hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,regPrev);
  			tess.mesh.delete(ePrev);
  		}
  		firstTime = false;
  		regPrev = reg;
  		ePrev = e;
  	}
  	regPrev.dirty = true;
  	if(cleanUp) {
  		hxGeomAlgo__$Tess2_Sweep.walkDirtyRegions(tess,regPrev);
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.spliceMergeVertices = function(tess,e1,e2) {
  	tess.mesh.splice(e1,e2);
  };
  hxGeomAlgo__$Tess2_Sweep.vertexWeights = function(isect,org,dst) {
  	var t1 = hxGeomAlgo__$Tess2_Geom.vertL1dist(org,isect);
  	var t2 = hxGeomAlgo__$Tess2_Geom.vertL1dist(dst,isect);
  	var w0 = 0.5 * t2 / (t1 + t2);
  	var w1 = 0.5 * t1 / (t1 + t2);
  	isect.coords[0] += w0 * org.coords[0] + w1 * dst.coords[0];
  	isect.coords[1] += w0 * org.coords[1] + w1 * dst.coords[1];
  	isect.coords[2] += w0 * org.coords[2] + w1 * dst.coords[2];
  };
  hxGeomAlgo__$Tess2_Sweep.getIntersectData = function(tess,isect,orgUp,dstUp,orgLo,dstLo) {
  	var tmp = isect.coords[1] = isect.coords[2] = 0;
  	isect.coords[0] = tmp;
  	isect.idx = -1;
  	hxGeomAlgo__$Tess2_Sweep.vertexWeights(isect,orgUp,dstUp);
  	hxGeomAlgo__$Tess2_Sweep.vertexWeights(isect,orgLo,dstLo);
  };
  hxGeomAlgo__$Tess2_Sweep.checkForRightSplice = function(tess,regUp) {
  	var regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eUp = regUp.eUp;
  	var eLo = regLo.eUp;
  	if(hxGeomAlgo__$Tess2_Geom.vertLeq(eUp.Org,eLo.Org)) {
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(eLo.get_Dst(),eUp.Org,eLo.Org) > 0) {
  			return false;
  		}
  		if(!hxGeomAlgo__$Tess2_Geom.vertEq(eUp.Org,eLo.Org)) {
  			tess.mesh.splitEdge(eLo.Sym);
  			tess.mesh.splice(eUp,eLo.get_Oprev());
  			regUp.dirty = regLo.dirty = true;
  		} else if(eUp.Org != eLo.Org) {
  			tess.pq.delete(eUp.Org.pqHandle);
  			hxGeomAlgo__$Tess2_Sweep.spliceMergeVertices(tess,eLo.get_Oprev(),eUp);
  		}
  	} else {
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(eUp.get_Dst(),eLo.Org,eUp.Org) < 0) {
  			return false;
  		}
  		hxGeomAlgo__$Tess2_Sweep.regionAbove(regUp).dirty = regUp.dirty = true;
  		tess.mesh.splitEdge(eUp.Sym);
  		tess.mesh.splice(eLo.get_Oprev(),eUp);
  	}
  	return true;
  };
  hxGeomAlgo__$Tess2_Sweep.checkForLeftSplice = function(tess,regUp) {
  	var regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eUp = regUp.eUp;
  	var eLo = regLo.eUp;
  	var e;
  	var cond = !hxGeomAlgo__$Tess2_Geom.vertEq(eUp.get_Dst(),eLo.get_Dst());
  	if(hxGeomAlgo__$Tess2_Geom.vertLeq(eUp.get_Dst(),eLo.get_Dst())) {
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(eUp.get_Dst(),eLo.get_Dst(),eUp.Org) < 0) {
  			return false;
  		}
  		hxGeomAlgo__$Tess2_Sweep.regionAbove(regUp).dirty = regUp.dirty = true;
  		e = tess.mesh.splitEdge(eUp);
  		tess.mesh.splice(eLo.Sym,e);
  		e.Lface.inside = regUp.inside;
  	} else {
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(eLo.get_Dst(),eUp.get_Dst(),eLo.Org) > 0) {
  			return false;
  		}
  		regUp.dirty = regLo.dirty = true;
  		e = tess.mesh.splitEdge(eLo);
  		tess.mesh.splice(eUp.Lnext,eLo.Sym);
  		e.get_Rface().inside = regUp.inside;
  	}
  	return true;
  };
  hxGeomAlgo__$Tess2_Sweep.checkForIntersect = function(tess,regUp) {
  	var regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eUp = regUp.eUp;
  	var eLo = regLo.eUp;
  	var orgUp = eUp.Org;
  	var orgLo = eLo.Org;
  	var dstUp = eUp.get_Dst();
  	var dstLo = eLo.get_Dst();
  	var isect = new hxGeomAlgo__$Tess2_TessVertex();
  	var e;
  	var cond = !hxGeomAlgo__$Tess2_Geom.vertEq(dstLo,dstUp);
  	var cond = hxGeomAlgo__$Tess2_Geom.edgeSign(dstUp,tess.event,orgUp) <= 0;
  	var cond = hxGeomAlgo__$Tess2_Geom.edgeSign(dstLo,tess.event,orgLo) >= 0;
  	if(orgUp == orgLo) {
  		return false;
  	}
  	var tMinUp = Math.min(orgUp.t,dstUp.t);
  	var tMaxLo = Math.max(orgLo.t,dstLo.t);
  	if(tMinUp > tMaxLo) {
  		return false;
  	}
  	if(hxGeomAlgo__$Tess2_Geom.vertLeq(orgUp,orgLo)) {
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(dstLo,orgUp,orgLo) > 0) {
  			return false;
  		}
  	} else if(hxGeomAlgo__$Tess2_Geom.edgeSign(dstUp,orgLo,orgUp) < 0) {
  		return false;
  	}
  	hxGeomAlgo__$Tess2_Sweep.debugEvent(tess);
  	hxGeomAlgo__$Tess2_Geom.intersect(dstUp,orgUp,dstLo,orgLo,isect);
  	if(hxGeomAlgo__$Tess2_Geom.vertLeq(isect,tess.event)) {
  		isect.s = tess.event.s;
  		isect.t = tess.event.t;
  	}
  	var orgMin = hxGeomAlgo__$Tess2_Geom.vertLeq(orgUp,orgLo) ? orgUp : orgLo;
  	if(hxGeomAlgo__$Tess2_Geom.vertLeq(orgMin,isect)) {
  		isect.s = orgMin.s;
  		isect.t = orgMin.t;
  	}
  	if(hxGeomAlgo__$Tess2_Geom.vertEq(isect,orgUp) || hxGeomAlgo__$Tess2_Geom.vertEq(isect,orgLo)) {
  		hxGeomAlgo__$Tess2_Sweep.checkForRightSplice(tess,regUp);
  		return false;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.vertEq(dstUp,tess.event) && hxGeomAlgo__$Tess2_Geom.edgeSign(dstUp,tess.event,isect) >= 0 || !hxGeomAlgo__$Tess2_Geom.vertEq(dstLo,tess.event) && hxGeomAlgo__$Tess2_Geom.edgeSign(dstLo,tess.event,isect) <= 0) {
  		if(dstLo == tess.event) {
  			tess.mesh.splitEdge(eUp.Sym);
  			tess.mesh.splice(eLo.Sym,eUp);
  			regUp = hxGeomAlgo__$Tess2_Sweep.topLeftRegion(tess,regUp);
  			eUp = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp).eUp;
  			hxGeomAlgo__$Tess2_Sweep.finishLeftRegions(tess,hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp),regLo);
  			hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,eUp.get_Oprev(),eUp,eUp,true);
  			return true;
  		}
  		if(dstUp == tess.event) {
  			tess.mesh.splitEdge(eLo.Sym);
  			tess.mesh.splice(eUp.Lnext,eLo.get_Oprev());
  			regLo = regUp;
  			regUp = hxGeomAlgo__$Tess2_Sweep.topRightRegion(regUp);
  			e = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp).eUp.get_Rprev();
  			regLo.eUp = eLo.get_Oprev();
  			eLo = hxGeomAlgo__$Tess2_Sweep.finishLeftRegions(tess,regLo,null);
  			hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,eLo.Onext,eUp.get_Rprev(),e,true);
  			return true;
  		}
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(dstUp,tess.event,isect) >= 0) {
  			hxGeomAlgo__$Tess2_Sweep.regionAbove(regUp).dirty = regUp.dirty = true;
  			tess.mesh.splitEdge(eUp.Sym);
  			eUp.Org.s = tess.event.s;
  			eUp.Org.t = tess.event.t;
  		}
  		if(hxGeomAlgo__$Tess2_Geom.edgeSign(dstLo,tess.event,isect) <= 0) {
  			regUp.dirty = regLo.dirty = true;
  			tess.mesh.splitEdge(eLo.Sym);
  			eLo.Org.s = tess.event.s;
  			eLo.Org.t = tess.event.t;
  		}
  		return false;
  	}
  	tess.mesh.splitEdge(eUp.Sym);
  	tess.mesh.splitEdge(eLo.Sym);
  	tess.mesh.splice(eLo.get_Oprev(),eUp);
  	eUp.Org.s = isect.s;
  	eUp.Org.t = isect.t;
  	eUp.Org.pqHandle = tess.pq.insert(eUp.Org);
  	hxGeomAlgo__$Tess2_Sweep.getIntersectData(tess,eUp.Org,orgUp,dstUp,orgLo,dstLo);
  	hxGeomAlgo__$Tess2_Sweep.regionAbove(regUp).dirty = regUp.dirty = regLo.dirty = true;
  	return false;
  };
  hxGeomAlgo__$Tess2_Sweep.walkDirtyRegions = function(tess,regUp) {
  	var regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eUp;
  	var eLo;
  	while(true) {
  		while(regLo.dirty) {
  			regUp = regLo;
  			regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regLo);
  		}
  		if(!regUp.dirty) {
  			regLo = regUp;
  			regUp = hxGeomAlgo__$Tess2_Sweep.regionAbove(regUp);
  			if(regUp == null || !regUp.dirty) {
  				return;
  			}
  		}
  		regUp.dirty = false;
  		eUp = regUp.eUp;
  		eLo = regLo.eUp;
  		if(eUp.get_Dst() != eLo.get_Dst()) {
  			if(hxGeomAlgo__$Tess2_Sweep.checkForLeftSplice(tess,regUp)) {
  				if(regLo.fixUpperEdge) {
  					hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,regLo);
  					tess.mesh.delete(eLo);
  					regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  					eLo = regLo.eUp;
  				} else if(regUp.fixUpperEdge) {
  					hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,regUp);
  					tess.mesh.delete(eUp);
  					regUp = hxGeomAlgo__$Tess2_Sweep.regionAbove(regLo);
  					eUp = regUp.eUp;
  				}
  			}
  		}
  		if(eUp.Org != eLo.Org) {
  			if(eUp.get_Dst() != eLo.get_Dst() && !regUp.fixUpperEdge && !regLo.fixUpperEdge && (eUp.get_Dst() == tess.event || eLo.get_Dst() == tess.event)) {
  				if(hxGeomAlgo__$Tess2_Sweep.checkForIntersect(tess,regUp)) {
  					return;
  				}
  			} else {
  				hxGeomAlgo__$Tess2_Sweep.checkForRightSplice(tess,regUp);
  			}
  		}
  		if(eUp.Org == eLo.Org && eUp.get_Dst() == eLo.get_Dst()) {
  			hxGeomAlgo__$Tess2_Sweep.addWinding(eLo,eUp);
  			hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,regUp);
  			tess.mesh.delete(eUp);
  			regUp = hxGeomAlgo__$Tess2_Sweep.regionAbove(regLo);
  		}
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.connectRightVertex = function(tess,regUp,eBottomLeft) {
  	var eNew;
  	var eTopLeft = eBottomLeft.Onext;
  	var regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eUp = regUp.eUp;
  	var eLo = regLo.eUp;
  	var degenerate = false;
  	if(eUp.get_Dst() != eLo.get_Dst()) {
  		hxGeomAlgo__$Tess2_Sweep.checkForIntersect(tess,regUp);
  	}
  	if(hxGeomAlgo__$Tess2_Geom.vertEq(eUp.Org,tess.event)) {
  		tess.mesh.splice(eTopLeft.get_Oprev(),eUp);
  		regUp = hxGeomAlgo__$Tess2_Sweep.topLeftRegion(tess,regUp);
  		eTopLeft = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp).eUp;
  		hxGeomAlgo__$Tess2_Sweep.finishLeftRegions(tess,hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp),regLo);
  		degenerate = true;
  	}
  	if(hxGeomAlgo__$Tess2_Geom.vertEq(eLo.Org,tess.event)) {
  		tess.mesh.splice(eBottomLeft,eLo.get_Oprev());
  		eBottomLeft = hxGeomAlgo__$Tess2_Sweep.finishLeftRegions(tess,regLo,null);
  		degenerate = true;
  	}
  	if(degenerate) {
  		hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,eBottomLeft.Onext,eTopLeft,eTopLeft,true);
  		return;
  	}
  	if(hxGeomAlgo__$Tess2_Geom.vertLeq(eLo.Org,eUp.Org)) {
  		eNew = eLo.get_Oprev();
  	} else {
  		eNew = eUp;
  	}
  	eNew = tess.mesh.connect(eBottomLeft.get_Lprev(),eNew);
  	hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,eNew,eNew.Onext,eNew.Onext,false);
  	eNew.Sym.activeRegion.fixUpperEdge = true;
  	hxGeomAlgo__$Tess2_Sweep.walkDirtyRegions(tess,regUp);
  };
  hxGeomAlgo__$Tess2_Sweep.connectLeftDegenerate = function(tess,regUp,vEvent) {
  	var e = regUp.eUp;
  	if(hxGeomAlgo__$Tess2_Geom.vertEq(e.Org,vEvent)) {
  		hxGeomAlgo__$Tess2_Sweep.spliceMergeVertices(tess,e,vEvent.anEdge);
  		return;
  	}
  	if(!hxGeomAlgo__$Tess2_Geom.vertEq(e.get_Dst(),vEvent)) {
  		tess.mesh.splitEdge(e.Sym);
  		if(regUp.fixUpperEdge) {
  			tess.mesh.delete(e.Onext);
  			regUp.fixUpperEdge = false;
  		}
  		tess.mesh.splice(vEvent.anEdge,e);
  		hxGeomAlgo__$Tess2_Sweep.sweepEvent(tess,vEvent);
  		return;
  	}
  	regUp = hxGeomAlgo__$Tess2_Sweep.topRightRegion(regUp);
  	var reg = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eTopRight = reg.eUp.Sym;
  	var eLast = eTopRight.Onext;
  	var eTopLeft = eLast;
  	if(reg.fixUpperEdge) {
  		hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,reg);
  		tess.mesh.delete(eTopRight);
  		eTopRight = eTopLeft.get_Oprev();
  	}
  	tess.mesh.splice(vEvent.anEdge,eTopRight);
  	if(!hxGeomAlgo__$Tess2_Geom.edgeGoesLeft(eTopLeft)) {
  		eTopLeft = null;
  	}
  	hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,eTopRight.Onext,eLast,eTopLeft,true);
  };
  hxGeomAlgo__$Tess2_Sweep.connectLeftVertex = function(tess,vEvent) {
  	var eNew;
  	var tmp = new hxGeomAlgo__$Tess2_ActiveRegion();
  	tmp.eUp = vEvent.anEdge.Sym;
  	var regUp = tess.dict.search(tmp).key;
  	var regLo = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	if(regLo == null) {
  		return;
  	}
  	var eUp = regUp.eUp;
  	var eLo = regLo.eUp;
  	if(hxGeomAlgo__$Tess2_Geom.edgeSign(eUp.get_Dst(),vEvent,eUp.Org) == 0.0) {
  		hxGeomAlgo__$Tess2_Sweep.connectLeftDegenerate(tess,regUp,vEvent);
  		return;
  	}
  	var reg = hxGeomAlgo__$Tess2_Geom.vertLeq(eLo.get_Dst(),eUp.get_Dst()) ? regUp : regLo;
  	if(regUp.inside || reg.fixUpperEdge) {
  		if(reg == regUp) {
  			eNew = tess.mesh.connect(vEvent.anEdge.Sym,eUp.Lnext);
  		} else {
  			var tempHalfEdge = tess.mesh.connect(eLo.get_Dnext(),vEvent.anEdge);
  			eNew = tempHalfEdge.Sym;
  		}
  		if(reg.fixUpperEdge) {
  			hxGeomAlgo__$Tess2_Sweep.fixUpperEdge(tess,reg,eNew);
  		} else {
  			hxGeomAlgo__$Tess2_Sweep.computeWinding(tess,hxGeomAlgo__$Tess2_Sweep.addRegionBelow(tess,regUp,eNew));
  		}
  		hxGeomAlgo__$Tess2_Sweep.sweepEvent(tess,vEvent);
  	} else {
  		hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,vEvent.anEdge,vEvent.anEdge,null,true);
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.sweepEvent = function(tess,vEvent) {
  	tess.event = vEvent;
  	hxGeomAlgo__$Tess2_Sweep.debugEvent(tess);
  	var e = vEvent.anEdge;
  	while(e.activeRegion == null) {
  		e = e.Onext;
  		if(e == vEvent.anEdge) {
  			hxGeomAlgo__$Tess2_Sweep.connectLeftVertex(tess,vEvent);
  			return;
  		}
  	}
  	var regUp = hxGeomAlgo__$Tess2_Sweep.topLeftRegion(tess,e.activeRegion);
  	var reg = hxGeomAlgo__$Tess2_Sweep.regionBelow(regUp);
  	var eTopLeft = reg.eUp;
  	var eBottomLeft = hxGeomAlgo__$Tess2_Sweep.finishLeftRegions(tess,reg,null);
  	if(eBottomLeft.Onext == eTopLeft) {
  		hxGeomAlgo__$Tess2_Sweep.connectRightVertex(tess,regUp,eBottomLeft);
  	} else {
  		hxGeomAlgo__$Tess2_Sweep.addRightEdges(tess,regUp,eBottomLeft.Onext,eTopLeft,eTopLeft,true);
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.addSentinel = function(tess,smin,smax,t) {
  	var reg = new hxGeomAlgo__$Tess2_ActiveRegion();
  	var e = tess.mesh.makeEdge();
  	e.Org.s = smax;
  	e.Org.t = t;
  	e.get_Dst().s = smin;
  	e.get_Dst().t = t;
  	tess.event = e.get_Dst();
  	reg.eUp = e;
  	reg.windingNumber = 0;
  	reg.inside = false;
  	reg.fixUpperEdge = false;
  	reg.sentinel = true;
  	reg.dirty = false;
  	reg.nodeUp = tess.dict.insert(reg);
  };
  hxGeomAlgo__$Tess2_Sweep.initEdgeDict = function(tess) {
  	tess.dict = new hxGeomAlgo__$Tess2_Dict(tess,hxGeomAlgo__$Tess2_Sweep.edgeLeq);
  	var w = tess.bmax[0] - tess.bmin[0];
  	var h = tess.bmax[1] - tess.bmin[1];
  	var smin = tess.bmin[0] - w;
  	var smax = tess.bmax[0] + w;
  	var tmin = tess.bmin[1] - h;
  	var tmax = tess.bmax[1] + h;
  	hxGeomAlgo__$Tess2_Sweep.addSentinel(tess,smin,smax,tmin);
  	hxGeomAlgo__$Tess2_Sweep.addSentinel(tess,smin,smax,tmax);
  };
  hxGeomAlgo__$Tess2_Sweep.doneEdgeDict = function(tess) {
  	var reg;
  	var fixedEdges = 0;
  	while(true) {
  		reg = tess.dict.min().key;
  		if(!(reg != null)) {
  			break;
  		}
  		if(!reg.sentinel) {
  			var cond = ++fixedEdges == 1;
  		}
  		hxGeomAlgo__$Tess2_Sweep.deleteRegion(tess,reg);
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.removeDegenerateEdges = function(tess) {
  	var eNext;
  	var eLnext;
  	var eHead = tess.mesh.eHead;
  	var e = eHead.next;
  	while(e != eHead) {
  		eNext = e.next;
  		eLnext = e.Lnext;
  		if(hxGeomAlgo__$Tess2_Geom.vertEq(e.Org,e.get_Dst()) && e.Lnext.Lnext != e) {
  			hxGeomAlgo__$Tess2_Sweep.spliceMergeVertices(tess,eLnext,e);
  			tess.mesh.delete(e);
  			e = eLnext;
  			eLnext = e.Lnext;
  		}
  		if(eLnext.Lnext == e) {
  			if(eLnext != e) {
  				if(eLnext == eNext || eLnext == eNext.Sym) {
  					eNext = eNext.next;
  				}
  				tess.mesh.delete(eLnext);
  			}
  			if(e == eNext || e == eNext.Sym) {
  				eNext = eNext.next;
  			}
  			tess.mesh.delete(e);
  		}
  		e = eNext;
  	}
  };
  hxGeomAlgo__$Tess2_Sweep.initPriorityQ = function(tess) {
  	var vertexCount = 0;
  	var vHead = tess.mesh.vHead;
  	var v = vHead.next;
  	while(v != vHead) {
  		++vertexCount;
  		v = v.next;
  	}
  	vertexCount += 8;
  	var pq = tess.pq = new hxGeomAlgo__$Tess2_PriorityQ(vertexCount,hxGeomAlgo__$Tess2_Geom.vertLeq);
  	vHead = tess.mesh.vHead;
  	v = vHead.next;
  	while(v != vHead) {
  		v.pqHandle = pq.insert(v);
  		v = v.next;
  	}
  	if(v != vHead) {
  		return false;
  	}
  	pq.init();
  	return true;
  };
  hxGeomAlgo__$Tess2_Sweep.donePriorityQ = function(tess) {
  	tess.pq = null;
  };
  hxGeomAlgo__$Tess2_Sweep.removeDegenerateFaces = function(tess,mesh) {
  	var fNext;
  	var e;
  	var f = mesh.fHead.next;
  	while(f != mesh.fHead) {
  		fNext = f.next;
  		e = f.anEdge;
  		if(e.Lnext.Lnext == e) {
  			hxGeomAlgo__$Tess2_Sweep.addWinding(e.Onext,e);
  			tess.mesh.delete(e);
  		}
  		f = fNext;
  	}
  	return true;
  };
  hxGeomAlgo__$Tess2_Sweep.computeInterior = function(tess) {
  	var v;
  	var vNext;
  	hxGeomAlgo__$Tess2_Sweep.removeDegenerateEdges(tess);
  	if(!hxGeomAlgo__$Tess2_Sweep.initPriorityQ(tess)) {
  		return false;
  	}
  	hxGeomAlgo__$Tess2_Sweep.initEdgeDict(tess);
  	var pq = tess.pq;
  	while(true) {
  		v = tess.pq.extractMin();
  		if(!(v != null)) {
  			break;
  		}
  		while(true) {
  			vNext = tess.pq.min();
  			if(vNext == null || !hxGeomAlgo__$Tess2_Geom.vertEq(vNext,v)) {
  				break;
  			}
  			vNext = tess.pq.extractMin();
  			hxGeomAlgo__$Tess2_Sweep.spliceMergeVertices(tess,v.anEdge,vNext.anEdge);
  		}
  		hxGeomAlgo__$Tess2_Sweep.sweepEvent(tess,v);
  	}
  	tess.event = tess.dict.min().key.eUp.Org;
  	hxGeomAlgo__$Tess2_Sweep.debugEvent(tess);
  	hxGeomAlgo__$Tess2_Sweep.doneEdgeDict(tess);
  	hxGeomAlgo__$Tess2_Sweep.donePriorityQ(tess);
  	if(!hxGeomAlgo__$Tess2_Sweep.removeDegenerateFaces(tess,tess.mesh)) {
  		return false;
  	}
  	tess.mesh.check();
  	return true;
  };
  var hxGeomAlgo_Tesselator = $hx_exports["hxGeomAlgo"]["Tesselator"] = function() {
  	this.elementCount = 0;
  	this.elements = [];
  	this.vertexCount = 0;
  	this.vertexIndices = [];
  	this.vertices = [];
  	this.vertexIndexCounter = 0;
  	this.event = null;
  	this.pq = null;
  	this.dict = null;
  	this.bmax = [0.0,0.0];
  	this.bmin = [0.0,0.0];
  	this.tUnit = [0.0,0.0,0.0];
  	this.sUnit = [0.0,0.0,0.0];
  	this.normal = [0.0,0.0,0.0];
  	this.mesh = null;
  	this.windingRule = hxGeomAlgo_WindingRule.ODD;
  };
  hxGeomAlgo_Tesselator.__name__ = true;
  hxGeomAlgo_Tesselator.prototype = {
  	dot_: function(u,v) {
  		return u[0] * v[0] + u[1] * v[1] + u[2] * v[2];
  	}
  	,normalize_: function(v) {
  		var len = v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
  		len = Math.sqrt(len);
  		v[0] /= len;
  		v[1] /= len;
  		v[2] /= len;
  	}
  	,longAxis_: function(v) {
  		var i = 0;
  		if(Math.abs(v[1]) > Math.abs(v[0])) {
  			i = 1;
  		}
  		if(Math.abs(v[2]) > Math.abs(v[i])) {
  			i = 2;
  		}
  		return i;
  	}
  	,computeNormal_: function(norm) {
  		var c;
  		var tLen2;
  		var maxVal = [.0,.0,.0];
  		var minVal = [.0,.0,.0];
  		var d1 = [.0,.0,.0];
  		var d2_0 = .0;
  		var d2_1 = .0;
  		var d2_2 = .0;
  		var tNorm_0 = .0;
  		var tNorm_1 = .0;
  		var tNorm_2 = .0;
  		var maxVert = [null,null,null];
  		var minVert = [null,null,null];
  		var vHead = this.mesh.vHead;
  		var v = vHead.next;
  		c = v.coords[0];
  		minVal[0] = c;
  		minVert[0] = v;
  		maxVal[0] = c;
  		maxVert[0] = v;
  		c = v.coords[1];
  		minVal[1] = c;
  		minVert[1] = v;
  		maxVal[1] = c;
  		maxVert[1] = v;
  		c = v.coords[2];
  		minVal[2] = c;
  		minVert[2] = v;
  		maxVal[2] = c;
  		maxVert[2] = v;
  		v = vHead.next;
  		while(v != vHead) {
  			c = v.coords[0];
  			if(c < minVal[0]) {
  				minVal[0] = c;
  				minVert[0] = v;
  			}
  			if(c > maxVal[0]) {
  				maxVal[0] = c;
  				maxVert[0] = v;
  			}
  			c = v.coords[1];
  			if(c < minVal[1]) {
  				minVal[1] = c;
  				minVert[1] = v;
  			}
  			if(c > maxVal[1]) {
  				maxVal[1] = c;
  				maxVert[1] = v;
  			}
  			c = v.coords[2];
  			if(c < minVal[2]) {
  				minVal[2] = c;
  				minVert[2] = v;
  			}
  			if(c > maxVal[2]) {
  				maxVal[2] = c;
  				maxVert[2] = v;
  			}
  			v = v.next;
  		}
  		var i = 0;
  		if(maxVal[1] - minVal[1] > maxVal[0] - minVal[0]) {
  			i = 1;
  		}
  		if(maxVal[2] - minVal[2] > maxVal[i] - minVal[i]) {
  			i = 2;
  		}
  		if(minVal[i] >= maxVal[i]) {
  			norm[0] = 0;
  			norm[1] = 0;
  			norm[2] = 1;
  			return;
  		}
  		var maxLen2 = .0;
  		var v1 = minVert[i];
  		var v2 = maxVert[i];
  		d1[0] = v1.coords[0] - v2.coords[0];
  		d1[1] = v1.coords[1] - v2.coords[1];
  		d1[2] = v1.coords[2] - v2.coords[2];
  		v = vHead.next;
  		while(v != vHead) {
  			d2_0 = v.coords[0] - v2.coords[0];
  			d2_1 = v.coords[1] - v2.coords[1];
  			d2_2 = v.coords[2] - v2.coords[2];
  			tNorm_0 = d1[1] * d2_2 - d1[2] * d2_1;
  			tNorm_1 = d1[2] * d2_0 - d1[0] * d2_2;
  			tNorm_2 = d1[0] * d2_1 - d1[1] * d2_0;
  			tLen2 = tNorm_0 * tNorm_0 + tNorm_1 * tNorm_1 + tNorm_2 * tNorm_2;
  			if(tLen2 > maxLen2) {
  				maxLen2 = tLen2;
  				norm[0] = tNorm_0;
  				norm[1] = tNorm_1;
  				norm[2] = tNorm_2;
  			}
  			v = v.next;
  		}
  		if(maxLen2 <= 0) {
  			norm[0] = norm[1] = norm[2] = 0;
  			norm[this.longAxis_(d1)] = 1;
  		}
  	}
  	,checkOrientation_: function() {
  		var fHead = this.mesh.fHead;
  		var v;
  		var vHead = this.mesh.vHead;
  		var e;
  		var area = .0;
  		var f = fHead.next;
  		while(f != fHead) {
  			e = f.anEdge;
  			if(e.winding <= 0) {
  				f = f.next;
  				continue;
  			}
  			while(true) {
  				area += (e.Org.s - e.get_Dst().s) * (e.Org.t + e.get_Dst().t);
  				e = e.Lnext;
  				if(!(e != f.anEdge)) {
  					break;
  				}
  			}
  			f = f.next;
  		}
  		if(area < 0) {
  			v = vHead.next;
  			while(v != vHead) {
  				v.t = -v.t;
  				v = v.next;
  			}
  			this.tUnit[0] = -this.tUnit[0];
  			this.tUnit[1] = -this.tUnit[1];
  			this.tUnit[2] = -this.tUnit[2];
  		}
  	}
  	,projectPolygon_: function() {
  		var vHead = this.mesh.vHead;
  		var norm = [.0,.0,.0];
  		var computedNormal = false;
  		norm[0] = this.normal[0];
  		norm[1] = this.normal[1];
  		norm[2] = this.normal[2];
  		if(norm[0] == 0.0 && norm[1] == 0.0 && norm[2] == 0.0) {
  			this.computeNormal_(norm);
  			computedNormal = true;
  		}
  		var sUnit = this.sUnit;
  		var tUnit = this.tUnit;
  		var i = this.longAxis_(norm);
  		sUnit[i] = 0;
  		sUnit[(i + 1) % 3] = 1.0;
  		sUnit[(i + 2) % 3] = 0.0;
  		tUnit[i] = 0;
  		tUnit[(i + 1) % 3] = 0.0;
  		tUnit[(i + 2) % 3] = norm[i] > 0 ? 1.0 : -1.0;
  		var v = vHead.next;
  		while(v != vHead) {
  			v.s = this.dot_(v.coords,sUnit);
  			v.t = this.dot_(v.coords,tUnit);
  			v = v.next;
  		}
  		if(computedNormal) {
  			this.checkOrientation_();
  		}
  		var first = true;
  		v = vHead.next;
  		while(v != vHead) {
  			if(first) {
  				var tmp = this.bmax[0] = v.s;
  				this.bmin[0] = tmp;
  				var tmp1 = this.bmax[1] = v.t;
  				this.bmin[1] = tmp1;
  				first = false;
  			} else {
  				if(v.s < this.bmin[0]) {
  					this.bmin[0] = v.s;
  				}
  				if(v.s > this.bmax[0]) {
  					this.bmax[0] = v.s;
  				}
  				if(v.t < this.bmin[1]) {
  					this.bmin[1] = v.t;
  				}
  				if(v.t > this.bmax[1]) {
  					this.bmax[1] = v.t;
  				}
  			}
  			v = v.next;
  		}
  	}
  	,addWinding_: function(eDst,eSrc) {
  		eDst.winding += eSrc.winding;
  		eDst.Sym.winding += eSrc.Sym.winding;
  	}
  	,tessellateMonoRegion_: function(mesh,face) {
  		var up = face.anEdge;
  		while(hxGeomAlgo__$Tess2_Geom.vertLeq(up.get_Dst(),up.Org)) up = up.get_Lprev();
  		while(hxGeomAlgo__$Tess2_Geom.vertLeq(up.Org,up.get_Dst())) up = up.Lnext;
  		var lo = up.get_Lprev();
  		while(up.Lnext != lo) if(hxGeomAlgo__$Tess2_Geom.vertLeq(up.get_Dst(),lo.Org)) {
  			while(lo.Lnext != up && (hxGeomAlgo__$Tess2_Geom.edgeGoesLeft(lo.Lnext) || hxGeomAlgo__$Tess2_Geom.edgeSign(lo.Org,lo.get_Dst(),lo.Lnext.get_Dst()) <= 0.0)) {
  				var tempHalfEdge = mesh.connect(lo.Lnext,lo);
  				lo = tempHalfEdge.Sym;
  			}
  			lo = lo.get_Lprev();
  		} else {
  			while(lo.Lnext != up && (hxGeomAlgo__$Tess2_Geom.edgeGoesRight(up.get_Lprev()) || hxGeomAlgo__$Tess2_Geom.edgeSign(up.get_Dst(),up.Org,up.get_Lprev().Org) >= 0.0)) {
  				var tempHalfEdge1 = mesh.connect(up,up.get_Lprev());
  				up = tempHalfEdge1.Sym;
  			}
  			up = up.Lnext;
  		}
  		while(lo.Lnext.Lnext != up) {
  			var tempHalfEdge = mesh.connect(lo.Lnext,lo);
  			lo = tempHalfEdge.Sym;
  		}
  		return true;
  	}
  	,tessellateInterior_: function(mesh) {
  		var next;
  		var f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			next = f.next;
  			if(f.inside) {
  				if(!this.tessellateMonoRegion_(mesh,f)) {
  					return false;
  				}
  			}
  			f = next;
  		}
  		return true;
  	}
  	,refineDelaunay_: function(mesh) {
  		var stack = [];
  		var e;
  		var edges_0 = null;
  		var edges_1 = null;
  		var edges_2 = null;
  		var edges_3 = null;
  		var f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			if(f.inside) {
  				e = f.anEdge;
  				while(true) {
  					e.mark = hxGeomAlgo__$Tess2_Geom.edgeIsInternal(e);
  					if(e.mark && !e.Sym.mark) {
  						stack.push(e);
  					}
  					e = e.Lnext;
  					if(!(e != f.anEdge)) {
  						break;
  					}
  				}
  			}
  			f = f.next;
  		}
  		while(stack.length > 0) {
  			e = stack.pop();
  			e.mark = e.Sym.mark = false;
  			if(!hxGeomAlgo__$Tess2_Geom.edgeIsLocallyDelaunay(e)) {
  				hxGeomAlgo__$Tess2_TessMesh.flipEdge(mesh,e);
  				edges_0 = e.Lnext;
  				edges_1 = e.get_Lprev();
  				edges_2 = e.Sym.Lnext;
  				edges_3 = e.Sym.get_Lprev();
  				if(!edges_0.mark && hxGeomAlgo__$Tess2_Geom.edgeIsInternal(edges_0)) {
  					edges_0.mark = edges_0.Sym.mark = true;
  					stack.push(edges_0);
  				}
  				if(!edges_1.mark && hxGeomAlgo__$Tess2_Geom.edgeIsInternal(edges_1)) {
  					edges_1.mark = edges_1.Sym.mark = true;
  					stack.push(edges_1);
  				}
  				if(!edges_2.mark && hxGeomAlgo__$Tess2_Geom.edgeIsInternal(edges_2)) {
  					edges_2.mark = edges_2.Sym.mark = true;
  					stack.push(edges_2);
  				}
  			}
  		}
  		var _g = 0;
  		while(_g < stack.length) {
  			var e = stack[_g];
  			++_g;
  			stack.pop();
  		}
  		stack = null;
  	}
  	,discardExterior_: function(mesh) {
  		var next;
  		var f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			next = f.next;
  			if(!f.inside) {
  				mesh.zapFace(f);
  			}
  			f = next;
  		}
  	}
  	,setWindingNumber_: function(mesh,value,keepOnlyBoundary) {
  		var eNext;
  		var e = mesh.eHead.next;
  		while(e != mesh.eHead) {
  			eNext = e.next;
  			if(e.get_Rface().inside != e.Lface.inside) {
  				e.winding = e.Lface.inside ? value : -value;
  			} else if(!keepOnlyBoundary) {
  				e.winding = 0;
  			} else {
  				mesh.delete(e);
  			}
  			e = eNext;
  		}
  	}
  	,getNeighbourFace_: function(edge) {
  		if(edge.get_Rface() == null) {
  			return -1;
  		}
  		if(!edge.get_Rface().inside) {
  			return -1;
  		}
  		return edge.get_Rface().n;
  	}
  	,outputPolymesh_: function(mesh,resultsType,polySize,vertexDim) {
  		var edge;
  		var maxFaceCount = 0;
  		var maxVertexCount = 0;
  		var faceVerts;
  		var i;
  		var elements = 0;
  		var vert;
  		if(polySize > 3) {
  			mesh.mergeConvexFaces(polySize);
  		}
  		var v = mesh.vHead.next;
  		while(v != mesh.vHead) {
  			v.n = -1;
  			v = v.next;
  		}
  		var f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			f.n = -1;
  			if(!f.inside) {
  				f = f.next;
  				continue;
  			}
  			edge = f.anEdge;
  			faceVerts = 0;
  			while(true) {
  				v = edge.Org;
  				if(v.n == -1) {
  					v.n = maxVertexCount;
  					++maxVertexCount;
  				}
  				++faceVerts;
  				edge = edge.Lnext;
  				if(!(edge != f.anEdge)) {
  					break;
  				}
  			}
  			f.n = maxFaceCount;
  			++maxFaceCount;
  			f = f.next;
  		}
  		this.elementCount = maxFaceCount;
  		if(resultsType == hxGeomAlgo_ResultType.CONNECTED_POLYGONS) {
  			maxFaceCount *= 2;
  		}
  		this.elements = [];
  		this.vertexCount = maxVertexCount;
  		this.vertices = [];
  		this.vertexIndices = [];
  		v = mesh.vHead.next;
  		while(v != mesh.vHead) {
  			if(v.n != -1) {
  				var idx = v.n * vertexDim;
  				this.vertices[idx] = v.coords[0];
  				this.vertices[idx + 1] = v.coords[1];
  				if(vertexDim > 2) {
  					this.vertices[idx + 2] = v.coords[2];
  				}
  				this.vertexIndices[v.n] = v.idx;
  			}
  			v = v.next;
  		}
  		var nel = 0;
  		f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			if(!f.inside) {
  				f = f.next;
  				continue;
  			}
  			edge = f.anEdge;
  			faceVerts = 0;
  			while(true) {
  				v = edge.Org;
  				this.elements[nel++] = v.n;
  				++faceVerts;
  				edge = edge.Lnext;
  				if(!(edge != f.anEdge)) {
  					break;
  				}
  			}
  			var _g = faceVerts;
  			var _g1 = polySize;
  			while(_g < _g1) {
  				var i = _g++;
  				this.elements[nel++] = -1;
  			}
  			if(resultsType == hxGeomAlgo_ResultType.CONNECTED_POLYGONS) {
  				edge = f.anEdge;
  				while(true) {
  					this.elements[nel++] = this.getNeighbourFace_(edge);
  					edge = edge.Lnext;
  					if(!(edge != f.anEdge)) {
  						break;
  					}
  				}
  				var _g2 = faceVerts;
  				var _g3 = polySize;
  				while(_g2 < _g3) {
  					var i1 = _g2++;
  					this.elements[nel++] = -1;
  				}
  			}
  			f = f.next;
  		}
  	}
  	,outputContours_: function(mesh,vertexDim) {
  		var edge;
  		var start;
  		var verts;
  		var elements;
  		var vertInds;
  		var startVert = 0;
  		var vertCount = 0;
  		this.vertexCount = 0;
  		this.elementCount = 0;
  		var f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			if(!f.inside) {
  				f = f.next;
  				continue;
  			}
  			edge = f.anEdge;
  			start = edge;
  			while(true) {
  				this.vertexCount++;
  				edge = edge.Lnext;
  				if(!(edge != start)) {
  					break;
  				}
  			}
  			this.elementCount++;
  			f = f.next;
  		}
  		this.elements = [];
  		this.vertices = [];
  		this.vertexIndices = [];
  		var nv = 0;
  		var nvi = 0;
  		var nel = 0;
  		startVert = 0;
  		f = mesh.fHead.next;
  		while(f != mesh.fHead) {
  			if(!f.inside) {
  				f = f.next;
  				continue;
  			}
  			vertCount = 0;
  			edge = f.anEdge;
  			start = edge;
  			while(true) {
  				this.vertices[nv++] = edge.Org.coords[0];
  				this.vertices[nv++] = edge.Org.coords[1];
  				if(vertexDim > 2) {
  					this.vertices[nv++] = edge.Org.coords[2];
  				}
  				this.vertexIndices[nvi++] = edge.Org.idx;
  				++vertCount;
  				edge = edge.Lnext;
  				if(!(edge != start)) {
  					break;
  				}
  			}
  			this.elements[nel++] = startVert;
  			this.elements[nel++] = vertCount;
  			startVert += vertCount;
  			f = f.next;
  		}
  	}
  	,addContour: function(vertexDim,vertices) {
  		if(this.mesh == null) {
  			this.mesh = new hxGeomAlgo__$Tess2_TessMesh();
  		}
  		if(vertexDim < 2) {
  			vertexDim = 2;
  		}
  		if(vertexDim > 3) {
  			vertexDim = 3;
  		}
  		var e = null;
  		var i = 0;
  		while(i < vertices.length) {
  			if(e == null) {
  				e = this.mesh.makeEdge();
  				this.mesh.splice(e,e.Sym);
  			} else {
  				this.mesh.splitEdge(e);
  				e = e.Lnext;
  			}
  			e.Org.coords[0] = vertices[i];
  			e.Org.coords[1] = vertices[i + 1];
  			if(vertexDim > 2) {
  				e.Org.coords[2] = vertices[i + 2];
  			} else {
  				e.Org.coords[2] = 0.0;
  			}
  			e.Org.idx = this.vertexIndexCounter++;
  			e.winding = 1;
  			e.Sym.winding = -1;
  			i += vertexDim;
  		}
  	}
  	,tesselate: function(windingRule,resultType,polySize,vertexDim,normal) {
  		this.vertices = [];
  		this.elements = [];
  		this.vertexIndices = [];
  		this.vertexIndexCounter = 0;
  		if(normal != null) {
  			this.normal[0] = normal[0];
  			this.normal[1] = normal[1];
  			this.normal[2] = normal[2];
  		}
  		this.windingRule = windingRule;
  		if(vertexDim < 2) {
  			vertexDim = 2;
  		}
  		if(vertexDim > 3) {
  			vertexDim = 3;
  		}
  		if(this.mesh == null) {
  			return false;
  		}
  		this.projectPolygon_();
  		hxGeomAlgo__$Tess2_Sweep.computeInterior(this);
  		var mesh = this.mesh;
  		if(resultType == hxGeomAlgo_ResultType.BOUNDARY_CONTOURS) {
  			this.setWindingNumber_(mesh,1,true);
  		} else {
  			this.tessellateInterior_(mesh);
  			if(resultType == hxGeomAlgo_ResultType.EXPERIMENTAL_DELAUNAY) {
  				this.refineDelaunay_(mesh);
  				polySize = 3;
  			}
  		}
  		mesh.check();
  		if(resultType == hxGeomAlgo_ResultType.BOUNDARY_CONTOURS) {
  			this.outputContours_(mesh,vertexDim);
  		} else {
  			this.outputPolymesh_(mesh,resultType,polySize,vertexDim);
  		}
  		return true;
  	}
  	,__class__: hxGeomAlgo_Tesselator
  };
  var js_Boot = function() { };
  js_Boot.__name__ = true;
  js_Boot.getClass = function(o) {
  	if(o == null) {
  		return null;
  	} else if(((o) instanceof Array)) {
  		return Array;
  	} else {
  		var cl = o.__class__;
  		if(cl != null) {
  			return cl;
  		}
  		var name = js_Boot.__nativeClassName(o);
  		if(name != null) {
  			return js_Boot.__resolveNativeClass(name);
  		}
  		return null;
  	}
  };
  js_Boot.__string_rec = function(o,s) {
  	if(o == null) {
  		return "null";
  	}
  	if(s.length >= 5) {
  		return "<...>";
  	}
  	var t = typeof(o);
  	if(t == "function" && (o.__name__ || o.__ename__)) {
  		t = "object";
  	}
  	switch(t) {
  	case "function":
  		return "<function>";
  	case "object":
  		if(o.__enum__) {
  			var e = $hxEnums[o.__enum__];
  			var n = e.__constructs__[o._hx_index];
  			var con = e[n];
  			if(con.__params__) {
  				s = s + "\t";
  				return n + "(" + ((function($this) {
  					var $r;
  					var _g = [];
  					{
  						var _g1 = 0;
  						var _g2 = con.__params__;
  						while(true) {
  							if(!(_g1 < _g2.length)) {
  								break;
  							}
  							var p = _g2[_g1];
  							_g1 = _g1 + 1;
  							_g.push(js_Boot.__string_rec(o[p],s));
  						}
  					}
  					$r = _g;
  					return $r;
  				}(this))).join(",") + ")";
  			} else {
  				return n;
  			}
  		}
  		if(((o) instanceof Array)) {
  			var str = "[";
  			s += "\t";
  			var _g = 0;
  			var _g1 = o.length;
  			while(_g < _g1) {
  				var i = _g++;
  				str += (i > 0 ? "," : "") + js_Boot.__string_rec(o[i],s);
  			}
  			str += "]";
  			return str;
  		}
  		var tostr;
  		try {
  			tostr = o.toString;
  		} catch( _g ) {
  			return "???";
  		}
  		if(tostr != null && tostr != Object.toString && typeof(tostr) == "function") {
  			var s2 = o.toString();
  			if(s2 != "[object Object]") {
  				return s2;
  			}
  		}
  		var str = "{\n";
  		s += "\t";
  		var hasp = o.hasOwnProperty != null;
  		var k = null;
  		for( k in o ) {
  		if(hasp && !o.hasOwnProperty(k)) {
  			continue;
  		}
  		if(k == "prototype" || k == "__class__" || k == "__super__" || k == "__interfaces__" || k == "__properties__") {
  			continue;
  		}
  		if(str.length != 2) {
  			str += ", \n";
  		}
  		str += s + k + " : " + js_Boot.__string_rec(o[k],s);
  		}
  		s = s.substring(1);
  		str += "\n" + s + "}";
  		return str;
  	case "string":
  		return o;
  	default:
  		return String(o);
  	}
  };
  js_Boot.__interfLoop = function(cc,cl) {
  	if(cc == null) {
  		return false;
  	}
  	if(cc == cl) {
  		return true;
  	}
  	var intf = cc.__interfaces__;
  	if(intf != null) {
  		var _g = 0;
  		var _g1 = intf.length;
  		while(_g < _g1) {
  			var i = _g++;
  			var i1 = intf[i];
  			if(i1 == cl || js_Boot.__interfLoop(i1,cl)) {
  				return true;
  			}
  		}
  	}
  	return js_Boot.__interfLoop(cc.__super__,cl);
  };
  js_Boot.__instanceof = function(o,cl) {
  	if(cl == null) {
  		return false;
  	}
  	switch(cl) {
  	case Array:
  		return ((o) instanceof Array);
  	case Bool:
  		return typeof(o) == "boolean";
  	case Dynamic:
  		return o != null;
  	case Float:
  		return typeof(o) == "number";
  	case Int:
  		if(typeof(o) == "number") {
  			return ((o | 0) === o);
  		} else {
  			return false;
  		}
  		break;
  	case String:
  		return typeof(o) == "string";
  	default:
  		if(o != null) {
  			if(typeof(cl) == "function") {
  				if(js_Boot.__downcastCheck(o,cl)) {
  					return true;
  				}
  			} else if(typeof(cl) == "object" && js_Boot.__isNativeObj(cl)) {
  				if(((o) instanceof cl)) {
  					return true;
  				}
  			}
  		} else {
  			return false;
  		}
  		if(cl == Class ? o.__name__ != null : false) {
  			return true;
  		}
  		if(cl == Enum ? o.__ename__ != null : false) {
  			return true;
  		}
  		return o.__enum__ != null ? $hxEnums[o.__enum__] == cl : false;
  	}
  };
  js_Boot.__downcastCheck = function(o,cl) {
  	if(!((o) instanceof cl)) {
  		if(cl.__isInterface__) {
  			return js_Boot.__interfLoop(js_Boot.getClass(o),cl);
  		} else {
  			return false;
  		}
  	} else {
  		return true;
  	}
  };
  js_Boot.__cast = function(o,t) {
  	if(o == null || js_Boot.__instanceof(o,t)) {
  		return o;
  	} else {
  		throw haxe_Exception.thrown("Cannot cast " + Std.string(o) + " to " + Std.string(t));
  	}
  };
  js_Boot.__nativeClassName = function(o) {
  	var name = js_Boot.__toStr.call(o).slice(8,-1);
  	if(name == "Object" || name == "Function" || name == "Math" || name == "JSON") {
  		return null;
  	}
  	return name;
  };
  js_Boot.__isNativeObj = function(o) {
  	return js_Boot.__nativeClassName(o) != null;
  };
  js_Boot.__resolveNativeClass = function(name) {
  	return $global[name];
  };
  var js_html__$CanvasElement_CanvasUtil = function() { };
  js_html__$CanvasElement_CanvasUtil.__name__ = true;
  js_html__$CanvasElement_CanvasUtil.getContextWebGL = function(canvas,attribs) {
  	var name = "webgl";
  	var ctx = canvas.getContext(name,attribs);
  	if(ctx != null) {
  		return ctx;
  	}
  	var name = "experimental-webgl";
  	var ctx = canvas.getContext(name,attribs);
  	if(ctx != null) {
  		return ctx;
  	}
  	return null;
  };
  var justPath_EllipseArc = function(arc_) {
  	this.arc = arc_;
  };
  justPath_EllipseArc.__name__ = true;
  justPath_EllipseArc.prototype = {
  	lineRender: function(moveTo,lineTo,dA,renderFirst) {
  		if(renderFirst == null) {
  			renderFirst = true;
  		}
  		var sign = this.arc.delta > 0 ? 1 : -1;
  		var totalSteps = Math.ceil(Math.abs(this.arc.delta) / dA);
  		var theta = this.arc.alpha;
  		var step = this.arc.delta / totalSteps;
  		if(renderFirst) {
  			var px = this.arc.cx + this.arc.rx * Math.cos(theta);
  			var py = this.arc.cy + this.arc.ry * Math.sin(theta);
  			px -= this.arc.cx;
  			py -= this.arc.cy;
  			var dx = px;
  			var dy = py;
  			px = dx * this.arc.phiCos - dy * this.arc.phiSin;
  			py = dx * this.arc.phiSin + dy * this.arc.phiCos;
  			this.x = px + this.arc.cx;
  			this.y = py + this.arc.cy;
  			moveTo(this.x,this.y);
  		}
  		var _g = 1;
  		var _g1 = totalSteps;
  		while(_g < _g1) {
  			var i = _g++;
  			theta += step;
  			var px = this.arc.cx + this.arc.rx * Math.cos(theta);
  			var py = this.arc.cy + this.arc.ry * Math.sin(theta);
  			px -= this.arc.cx;
  			py -= this.arc.cy;
  			var dx = px;
  			var dy = py;
  			px = dx * this.arc.phiCos - dy * this.arc.phiSin;
  			py = dx * this.arc.phiSin + dy * this.arc.phiCos;
  			this.x = px + this.arc.cx;
  			this.y = py + this.arc.cy;
  			lineTo(this.x,this.y);
  		}
  		var theta = this.arc.omega;
  		var px = this.arc.cx + this.arc.rx * Math.cos(theta);
  		var py = this.arc.cy + this.arc.ry * Math.sin(theta);
  		px -= this.arc.cx;
  		py -= this.arc.cy;
  		var dx = px;
  		var dy = py;
  		px = dx * this.arc.phiCos - dy * this.arc.phiSin;
  		py = dx * this.arc.phiSin + dy * this.arc.phiCos;
  		this.x = px + this.arc.cx;
  		this.y = py + this.arc.cy;
  		lineTo(this.x,this.y);
  	}
  	,__class__: justPath_EllipseArc
  };
  var justPath_IPathContext = function() { };
  justPath_IPathContext.__name__ = true;
  justPath_IPathContext.__isInterface__ = true;
  justPath_IPathContext.prototype = {
  	__class__: justPath_IPathContext
  };
  var justPath_StoreF6 = function() {
  	this.count = 0;
  	this.l = 0;
  };
  justPath_StoreF6.__name__ = true;
  justPath_StoreF6.prototype = {
  	push: function(v) {
  		switch(this.l) {
  		case 0:
  			this.s0 = v;
  			break;
  		case 1:
  			this.s1 = v;
  			break;
  		case 2:
  			this.s2 = v;
  			break;
  		case 3:
  			this.s3 = v;
  			break;
  		case 4:
  			this.s4 = v;
  			break;
  		case 5:
  			this.s5 = v;
  			break;
  		default:
  			if(this.s6 == null) {
  				this.s6 = new justPath_StoreF6();
  			}
  			this.s6.push(v);
  		}
  		this.l++;
  	}
  	,shift: function() {
  		var out = this.s0;
  		if(this.l != 0) {
  			this.s0 = this.s1;
  			this.s1 = this.s2;
  			this.s2 = this.s3;
  			this.s3 = this.s4;
  			this.s4 = this.s5;
  			this.s5 = null;
  			if(this.s6 != null) {
  				this.s5 = this.s6.shift();
  			}
  			this.l--;
  		}
  		return out;
  	}
  	,hasNext: function() {
  		return this.count < this.l + 1;
  	}
  	,next: function() {
  		var out = null;
  		switch(this.count) {
  		case 0:
  			out = this.s0;
  			break;
  		case 1:
  			out = this.s1;
  			break;
  		case 2:
  			out = this.s2;
  			break;
  		case 3:
  			out = this.s3;
  			break;
  		case 4:
  			out = this.s4;
  			break;
  		case 5:
  			out = this.s5;
  			break;
  		default:
  			out = this.s6.next();
  		}
  		this.count++;
  		return out;
  	}
  	,__class__: justPath_StoreF6
  };
  var justPath_SvgPath = function(pathContext_) {
  	this.l = 0;
  	this.c = 0;
  	this.controlY = 0.;
  	this.controlX = 0.;
  	this.lastY = 0.;
  	this.lastX = 0.;
  	this.pos = 0;
  	this.str = "";
  	this.pathContext = pathContext_;
  };
  justPath_SvgPath.__name__ = true;
  justPath_SvgPath.prototype = {
  	parse: function(str_) {
  		this.str = str_;
  		this.pos = 0;
  		this.l = this.str.length;
  		this.c = this.str.charCodeAt(this.pos++);
  		var count = 0;
  		this.store = new justPath_StoreF6();
  		while(this.pos < this.l) {
  			switch(this.c) {
  			case 65:
  				var _this = this.store;
  				_this.l = 0;
  				_this.s0 = null;
  				_this.s1 = null;
  				_this.s2 = null;
  				_this.s3 = null;
  				_this.s4 = null;
  				_this.s5 = null;
  				_this.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp = "";
  				var exit = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp != "") {
  							if((this.store.l & 1) == 0) {
  								var _this1 = this.store;
  								var v = parseFloat(temp);
  								switch(_this1.l) {
  								case 0:
  									_this1.s0 = v;
  									break;
  								case 1:
  									_this1.s1 = v;
  									break;
  								case 2:
  									_this1.s2 = v;
  									break;
  								case 3:
  									_this1.s3 = v;
  									break;
  								case 4:
  									_this1.s4 = v;
  									break;
  								case 5:
  									_this1.s5 = v;
  									break;
  								default:
  									if(_this1.s6 == null) {
  										_this1.s6 = new justPath_StoreF6();
  									}
  									var _this2 = _this1.s6;
  									switch(_this2.l) {
  									case 0:
  										_this2.s0 = v;
  										break;
  									case 1:
  										_this2.s1 = v;
  										break;
  									case 2:
  										_this2.s2 = v;
  										break;
  									case 3:
  										_this2.s3 = v;
  										break;
  									case 4:
  										_this2.s4 = v;
  										break;
  									case 5:
  										_this2.s5 = v;
  										break;
  									default:
  										if(_this2.s6 == null) {
  											_this2.s6 = new justPath_StoreF6();
  										}
  										_this2.s6.push(v);
  									}
  									_this2.l++;
  								}
  								_this1.l++;
  							} else {
  								var _this3 = this.store;
  								var v1 = parseFloat(temp);
  								switch(_this3.l) {
  								case 0:
  									_this3.s0 = v1;
  									break;
  								case 1:
  									_this3.s1 = v1;
  									break;
  								case 2:
  									_this3.s2 = v1;
  									break;
  								case 3:
  									_this3.s3 = v1;
  									break;
  								case 4:
  									_this3.s4 = v1;
  									break;
  								case 5:
  									_this3.s5 = v1;
  									break;
  								default:
  									if(_this3.s6 == null) {
  										_this3.s6 = new justPath_StoreF6();
  									}
  									var _this4 = _this3.s6;
  									switch(_this4.l) {
  									case 0:
  										_this4.s0 = v1;
  										break;
  									case 1:
  										_this4.s1 = v1;
  										break;
  									case 2:
  										_this4.s2 = v1;
  										break;
  									case 3:
  										_this4.s3 = v1;
  										break;
  									case 4:
  										_this4.s4 = v1;
  										break;
  									case 5:
  										_this4.s5 = v1;
  										break;
  									default:
  										if(_this4.s6 == null) {
  											_this4.s6 = new justPath_StoreF6();
  										}
  										_this4.s6.push(v1);
  									}
  									_this4.l++;
  								}
  								_this3.l++;
  							}
  							temp = "";
  						}
  						break;
  					case 45:
  						if(temp != "") {
  							if((this.store.l & 1) == 0) {
  								var _this5 = this.store;
  								var v2 = parseFloat(temp);
  								switch(_this5.l) {
  								case 0:
  									_this5.s0 = v2;
  									break;
  								case 1:
  									_this5.s1 = v2;
  									break;
  								case 2:
  									_this5.s2 = v2;
  									break;
  								case 3:
  									_this5.s3 = v2;
  									break;
  								case 4:
  									_this5.s4 = v2;
  									break;
  								case 5:
  									_this5.s5 = v2;
  									break;
  								default:
  									if(_this5.s6 == null) {
  										_this5.s6 = new justPath_StoreF6();
  									}
  									var _this6 = _this5.s6;
  									switch(_this6.l) {
  									case 0:
  										_this6.s0 = v2;
  										break;
  									case 1:
  										_this6.s1 = v2;
  										break;
  									case 2:
  										_this6.s2 = v2;
  										break;
  									case 3:
  										_this6.s3 = v2;
  										break;
  									case 4:
  										_this6.s4 = v2;
  										break;
  									case 5:
  										_this6.s5 = v2;
  										break;
  									default:
  										if(_this6.s6 == null) {
  											_this6.s6 = new justPath_StoreF6();
  										}
  										_this6.s6.push(v2);
  									}
  									_this6.l++;
  								}
  								_this5.l++;
  							} else {
  								var _this7 = this.store;
  								var v3 = parseFloat(temp);
  								switch(_this7.l) {
  								case 0:
  									_this7.s0 = v3;
  									break;
  								case 1:
  									_this7.s1 = v3;
  									break;
  								case 2:
  									_this7.s2 = v3;
  									break;
  								case 3:
  									_this7.s3 = v3;
  									break;
  								case 4:
  									_this7.s4 = v3;
  									break;
  								case 5:
  									_this7.s5 = v3;
  									break;
  								default:
  									if(_this7.s6 == null) {
  										_this7.s6 = new justPath_StoreF6();
  									}
  									var _this8 = _this7.s6;
  									switch(_this8.l) {
  									case 0:
  										_this8.s0 = v3;
  										break;
  									case 1:
  										_this8.s1 = v3;
  										break;
  									case 2:
  										_this8.s2 = v3;
  										break;
  									case 3:
  										_this8.s3 = v3;
  										break;
  									case 4:
  										_this8.s4 = v3;
  										break;
  									case 5:
  										_this8.s5 = v3;
  										break;
  									default:
  										if(_this8.s6 == null) {
  											_this8.s6 = new justPath_StoreF6();
  										}
  										_this8.s6.push(v3);
  									}
  									_this8.l++;
  								}
  								_this7.l++;
  							}
  						}
  						temp = "-";
  						break;
  					case 46:
  						temp += ".";
  						break;
  					case 48:
  						temp += "0";
  						break;
  					case 49:
  						temp += "1";
  						break;
  					case 50:
  						temp += "2";
  						break;
  					case 51:
  						temp += "3";
  						break;
  					case 52:
  						temp += "4";
  						break;
  					case 53:
  						temp += "5";
  						break;
  					case 54:
  						temp += "6";
  						break;
  					case 55:
  						temp += "7";
  						break;
  					case 56:
  						temp += "8";
  						break;
  					case 57:
  						temp += "9";
  						break;
  					default:
  						if(temp != "") {
  							if((this.store.l & 1) == 0) {
  								var _this9 = this.store;
  								var v4 = parseFloat(temp);
  								switch(_this9.l) {
  								case 0:
  									_this9.s0 = v4;
  									break;
  								case 1:
  									_this9.s1 = v4;
  									break;
  								case 2:
  									_this9.s2 = v4;
  									break;
  								case 3:
  									_this9.s3 = v4;
  									break;
  								case 4:
  									_this9.s4 = v4;
  									break;
  								case 5:
  									_this9.s5 = v4;
  									break;
  								default:
  									if(_this9.s6 == null) {
  										_this9.s6 = new justPath_StoreF6();
  									}
  									var _this10 = _this9.s6;
  									switch(_this10.l) {
  									case 0:
  										_this10.s0 = v4;
  										break;
  									case 1:
  										_this10.s1 = v4;
  										break;
  									case 2:
  										_this10.s2 = v4;
  										break;
  									case 3:
  										_this10.s3 = v4;
  										break;
  									case 4:
  										_this10.s4 = v4;
  										break;
  									case 5:
  										_this10.s5 = v4;
  										break;
  									default:
  										if(_this10.s6 == null) {
  											_this10.s6 = new justPath_StoreF6();
  										}
  										_this10.s6.push(v4);
  									}
  									_this10.l++;
  								}
  								_this9.l++;
  							} else {
  								var _this11 = this.store;
  								var v5 = parseFloat(temp);
  								switch(_this11.l) {
  								case 0:
  									_this11.s0 = v5;
  									break;
  								case 1:
  									_this11.s1 = v5;
  									break;
  								case 2:
  									_this11.s2 = v5;
  									break;
  								case 3:
  									_this11.s3 = v5;
  									break;
  								case 4:
  									_this11.s4 = v5;
  									break;
  								case 5:
  									_this11.s5 = v5;
  									break;
  								default:
  									if(_this11.s6 == null) {
  										_this11.s6 = new justPath_StoreF6();
  									}
  									var _this12 = _this11.s6;
  									switch(_this12.l) {
  									case 0:
  										_this12.s0 = v5;
  										break;
  									case 1:
  										_this12.s1 = v5;
  										break;
  									case 2:
  										_this12.s2 = v5;
  										break;
  									case 3:
  										_this12.s3 = v5;
  										break;
  									case 4:
  										_this12.s4 = v5;
  										break;
  									case 5:
  										_this12.s5 = v5;
  										break;
  									default:
  										if(_this12.s6 == null) {
  											_this12.s6 = new justPath_StoreF6();
  										}
  										_this12.s6.push(v5);
  									}
  									_this12.l++;
  								}
  								_this11.l++;
  							}
  							temp = "";
  						}
  						this.pos--;
  						exit = true;
  					}
  					if(exit) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 7) {
  					var sx = this.lastX;
  					var sy = this.lastY;
  					var _this13 = this.store;
  					var out = _this13.s0;
  					if(_this13.l != 0) {
  						_this13.s0 = _this13.s1;
  						_this13.s1 = _this13.s2;
  						_this13.s2 = _this13.s3;
  						_this13.s3 = _this13.s4;
  						_this13.s4 = _this13.s5;
  						_this13.s5 = null;
  						if(_this13.s6 != null) {
  							var _this14 = _this13.s6;
  							var out1 = _this14.s0;
  							if(_this14.l != 0) {
  								_this14.s0 = _this14.s1;
  								_this14.s1 = _this14.s2;
  								_this14.s2 = _this14.s3;
  								_this14.s3 = _this14.s4;
  								_this14.s4 = _this14.s5;
  								_this14.s5 = null;
  								if(_this14.s6 != null) {
  									_this14.s5 = _this14.s6.shift();
  								}
  								_this14.l--;
  							}
  							_this13.s5 = out1;
  						}
  						_this13.l--;
  					}
  					var xr = out;
  					var _this15 = this.store;
  					var out2 = _this15.s0;
  					if(_this15.l != 0) {
  						_this15.s0 = _this15.s1;
  						_this15.s1 = _this15.s2;
  						_this15.s2 = _this15.s3;
  						_this15.s3 = _this15.s4;
  						_this15.s4 = _this15.s5;
  						_this15.s5 = null;
  						if(_this15.s6 != null) {
  							var _this16 = _this15.s6;
  							var out3 = _this16.s0;
  							if(_this16.l != 0) {
  								_this16.s0 = _this16.s1;
  								_this16.s1 = _this16.s2;
  								_this16.s2 = _this16.s3;
  								_this16.s3 = _this16.s4;
  								_this16.s4 = _this16.s5;
  								_this16.s5 = null;
  								if(_this16.s6 != null) {
  									_this16.s5 = _this16.s6.shift();
  								}
  								_this16.l--;
  							}
  							_this15.s5 = out3;
  						}
  						_this15.l--;
  					}
  					var yr = out2;
  					var _this17 = this.store;
  					var out4 = _this17.s0;
  					if(_this17.l != 0) {
  						_this17.s0 = _this17.s1;
  						_this17.s1 = _this17.s2;
  						_this17.s2 = _this17.s3;
  						_this17.s3 = _this17.s4;
  						_this17.s4 = _this17.s5;
  						_this17.s5 = null;
  						if(_this17.s6 != null) {
  							var _this18 = _this17.s6;
  							var out5 = _this18.s0;
  							if(_this18.l != 0) {
  								_this18.s0 = _this18.s1;
  								_this18.s1 = _this18.s2;
  								_this18.s2 = _this18.s3;
  								_this18.s3 = _this18.s4;
  								_this18.s4 = _this18.s5;
  								_this18.s5 = null;
  								if(_this18.s6 != null) {
  									_this18.s5 = _this18.s6.shift();
  								}
  								_this18.l--;
  							}
  							_this17.s5 = out5;
  						}
  						_this17.l--;
  					}
  					var phi = out4;
  					var _this19 = this.store;
  					var out6 = _this19.s0;
  					if(_this19.l != 0) {
  						_this19.s0 = _this19.s1;
  						_this19.s1 = _this19.s2;
  						_this19.s2 = _this19.s3;
  						_this19.s3 = _this19.s4;
  						_this19.s4 = _this19.s5;
  						_this19.s5 = null;
  						if(_this19.s6 != null) {
  							var _this20 = _this19.s6;
  							var out7 = _this20.s0;
  							if(_this20.l != 0) {
  								_this20.s0 = _this20.s1;
  								_this20.s1 = _this20.s2;
  								_this20.s2 = _this20.s3;
  								_this20.s3 = _this20.s4;
  								_this20.s4 = _this20.s5;
  								_this20.s5 = null;
  								if(_this20.s6 != null) {
  									var _this21 = _this20.s6;
  									var out8 = _this21.s0;
  									if(_this21.l != 0) {
  										_this21.s0 = _this21.s1;
  										_this21.s1 = _this21.s2;
  										_this21.s2 = _this21.s3;
  										_this21.s3 = _this21.s4;
  										_this21.s4 = _this21.s5;
  										_this21.s5 = null;
  										if(_this21.s6 != null) {
  											_this21.s5 = _this21.s6.shift();
  										}
  										_this21.l--;
  									}
  									_this20.s5 = out8;
  								}
  								_this20.l--;
  							}
  							_this19.s5 = out7;
  						}
  						_this19.l--;
  					}
  					var large = out6 | 0;
  					var _this22 = this.store;
  					var out9 = _this22.s0;
  					if(_this22.l != 0) {
  						_this22.s0 = _this22.s1;
  						_this22.s1 = _this22.s2;
  						_this22.s2 = _this22.s3;
  						_this22.s3 = _this22.s4;
  						_this22.s4 = _this22.s5;
  						_this22.s5 = null;
  						if(_this22.s6 != null) {
  							var _this23 = _this22.s6;
  							var out10 = _this23.s0;
  							if(_this23.l != 0) {
  								_this23.s0 = _this23.s1;
  								_this23.s1 = _this23.s2;
  								_this23.s2 = _this23.s3;
  								_this23.s3 = _this23.s4;
  								_this23.s4 = _this23.s5;
  								_this23.s5 = null;
  								if(_this23.s6 != null) {
  									var _this24 = _this23.s6;
  									var out11 = _this24.s0;
  									if(_this24.l != 0) {
  										_this24.s0 = _this24.s1;
  										_this24.s1 = _this24.s2;
  										_this24.s2 = _this24.s3;
  										_this24.s3 = _this24.s4;
  										_this24.s4 = _this24.s5;
  										_this24.s5 = null;
  										if(_this24.s6 != null) {
  											_this24.s5 = _this24.s6.shift();
  										}
  										_this24.l--;
  									}
  									_this23.s5 = out11;
  								}
  								_this23.l--;
  							}
  							_this22.s5 = out10;
  						}
  						_this22.l--;
  					}
  					var sweep = out9 | 0;
  					var _this25 = this.store;
  					var out12 = _this25.s0;
  					if(_this25.l != 0) {
  						_this25.s0 = _this25.s1;
  						_this25.s1 = _this25.s2;
  						_this25.s2 = _this25.s3;
  						_this25.s3 = _this25.s4;
  						_this25.s4 = _this25.s5;
  						_this25.s5 = null;
  						if(_this25.s6 != null) {
  							var _this26 = _this25.s6;
  							var out13 = _this26.s0;
  							if(_this26.l != 0) {
  								_this26.s0 = _this26.s1;
  								_this26.s1 = _this26.s2;
  								_this26.s2 = _this26.s3;
  								_this26.s3 = _this26.s4;
  								_this26.s4 = _this26.s5;
  								_this26.s5 = null;
  								if(_this26.s6 != null) {
  									_this26.s5 = _this26.s6.shift();
  								}
  								_this26.l--;
  							}
  							_this25.s5 = out13;
  						}
  						_this25.l--;
  					}
  					this.lastX = out12;
  					var _this27 = this.store;
  					var out14 = _this27.s0;
  					if(_this27.l != 0) {
  						_this27.s0 = _this27.s1;
  						_this27.s1 = _this27.s2;
  						_this27.s2 = _this27.s3;
  						_this27.s3 = _this27.s4;
  						_this27.s4 = _this27.s5;
  						_this27.s5 = null;
  						if(_this27.s6 != null) {
  							var _this28 = _this27.s6;
  							var out15 = _this28.s0;
  							if(_this28.l != 0) {
  								_this28.s0 = _this28.s1;
  								_this28.s1 = _this28.s2;
  								_this28.s2 = _this28.s3;
  								_this28.s3 = _this28.s4;
  								_this28.s4 = _this28.s5;
  								_this28.s5 = null;
  								if(_this28.s6 != null) {
  									_this28.s5 = _this28.s6.shift();
  								}
  								_this28.l--;
  							}
  							_this27.s5 = out15;
  						}
  						_this27.l--;
  					}
  					this.lastY = out14;
  					var sx1 = sx;
  					var sy1 = sy;
  					var phi1 = phi;
  					var ex = this.lastX;
  					var ey = this.lastY;
  					var mx = (sx1 - ex) / 2;
  					var my = (sy1 - ey) / 2;
  					var ax = (sx1 + ex) / 2;
  					var ay = (sy1 + ey) / 2;
  					phi1 %= 360;
  					phi1 = phi1 * Math.PI / 180;
  					var sin = Math.sin(phi1);
  					var cos = Math.cos(phi1);
  					var x1 = mx * cos + my * sin;
  					var y1 = -mx * sin + my * cos;
  					var rx = Math.abs(xr);
  					var ry = Math.abs(yr);
  					var rxx = rx * rx;
  					var ryy = ry * ry;
  					var xx1 = x1 * x1;
  					var yy1 = y1 * y1;
  					var check = xx1 / rxx + yy1 / ryy;
  					if(check > 1) {
  						rx *= Math.sqrt(check);
  						ry *= Math.sqrt(check);
  						rxx = rx * rx;
  						ryy = ry * ry;
  					}
  					var sign = large == sweep ? -1 : 1;
  					var sq = (rxx * ryy - rxx * yy1 - ryy * xx1) / (rxx * yy1 + ryy * xx1);
  					if(sq < 0) {
  						sq = 0;
  					}
  					var coef = sign * Math.sqrt(sq);
  					var cx1 = coef * rx * y1 / ry;
  					var cy1 = -coef * ry * x1 / rx;
  					var cx = ax + cx1 * cos - cy1 * sin;
  					var cy = ay + cx1 * sin + cy1 * cos;
  					var phiSin = Math.sin(-phi1);
  					var phiCos = Math.cos(-phi1);
  					sx1 -= cx;
  					sy1 -= cy;
  					var dx = sx1;
  					var dy = sy1;
  					sx1 = dx * phiCos - dy * phiSin;
  					sy1 = dx * phiSin + dy * phiCos;
  					sx1 += cx;
  					sy1 += cy;
  					ex -= cx;
  					ey -= cy;
  					var dx1 = ex;
  					var dy1 = ey;
  					ex = dx1 * phiCos - dy1 * phiSin;
  					ey = dx1 * phiSin + dy1 * phiCos;
  					ex += cx;
  					ey += cy;
  					var alpha = Math.atan2(rx * (cy - sy1),ry * (cx - sx1)) - Math.PI;
  					var omega = Math.atan2(rx * (cy - ey),ry * (cx - ex)) - Math.PI;
  					var delta = alpha - omega;
  					if(sweep == 1 && delta > 0) {
  						delta -= 2 * Math.PI;
  					} else if(sweep == 0 && delta < 0) {
  						delta += 2 * Math.PI;
  					}
  					var this1 = { cx : cx, cy : cy, rx : rx, ry : ry, alpha : alpha, omega : omega, delta : -delta, phi : phi1, phiSin : Math.sin(phi1), phiCos : Math.cos(phi1)};
  					var ellipseData = this1;
  					var ellipse = new justPath_EllipseArc(ellipseData);
  					ellipse.lineRender(($_=this.pathContext,$bind($_,$_.moveTo)),($_=this.pathContext,$bind($_,$_.lineTo)),Math.PI / 18);
  				} else if(this.store.l > 7) {
  					while(this.store.l > 6) {
  						var sx2 = this.lastX;
  						var sy2 = this.lastY;
  						var _this29 = this.store;
  						var out16 = _this29.s0;
  						if(_this29.l != 0) {
  							_this29.s0 = _this29.s1;
  							_this29.s1 = _this29.s2;
  							_this29.s2 = _this29.s3;
  							_this29.s3 = _this29.s4;
  							_this29.s4 = _this29.s5;
  							_this29.s5 = null;
  							if(_this29.s6 != null) {
  								var _this30 = _this29.s6;
  								var out17 = _this30.s0;
  								if(_this30.l != 0) {
  									_this30.s0 = _this30.s1;
  									_this30.s1 = _this30.s2;
  									_this30.s2 = _this30.s3;
  									_this30.s3 = _this30.s4;
  									_this30.s4 = _this30.s5;
  									_this30.s5 = null;
  									if(_this30.s6 != null) {
  										_this30.s5 = _this30.s6.shift();
  									}
  									_this30.l--;
  								}
  								_this29.s5 = out17;
  							}
  							_this29.l--;
  						}
  						var xr1 = out16;
  						var _this31 = this.store;
  						var out18 = _this31.s0;
  						if(_this31.l != 0) {
  							_this31.s0 = _this31.s1;
  							_this31.s1 = _this31.s2;
  							_this31.s2 = _this31.s3;
  							_this31.s3 = _this31.s4;
  							_this31.s4 = _this31.s5;
  							_this31.s5 = null;
  							if(_this31.s6 != null) {
  								var _this32 = _this31.s6;
  								var out19 = _this32.s0;
  								if(_this32.l != 0) {
  									_this32.s0 = _this32.s1;
  									_this32.s1 = _this32.s2;
  									_this32.s2 = _this32.s3;
  									_this32.s3 = _this32.s4;
  									_this32.s4 = _this32.s5;
  									_this32.s5 = null;
  									if(_this32.s6 != null) {
  										_this32.s5 = _this32.s6.shift();
  									}
  									_this32.l--;
  								}
  								_this31.s5 = out19;
  							}
  							_this31.l--;
  						}
  						var yr1 = out18;
  						var _this33 = this.store;
  						var out20 = _this33.s0;
  						if(_this33.l != 0) {
  							_this33.s0 = _this33.s1;
  							_this33.s1 = _this33.s2;
  							_this33.s2 = _this33.s3;
  							_this33.s3 = _this33.s4;
  							_this33.s4 = _this33.s5;
  							_this33.s5 = null;
  							if(_this33.s6 != null) {
  								var _this34 = _this33.s6;
  								var out21 = _this34.s0;
  								if(_this34.l != 0) {
  									_this34.s0 = _this34.s1;
  									_this34.s1 = _this34.s2;
  									_this34.s2 = _this34.s3;
  									_this34.s3 = _this34.s4;
  									_this34.s4 = _this34.s5;
  									_this34.s5 = null;
  									if(_this34.s6 != null) {
  										_this34.s5 = _this34.s6.shift();
  									}
  									_this34.l--;
  								}
  								_this33.s5 = out21;
  							}
  							_this33.l--;
  						}
  						var phi2 = out20;
  						var _this35 = this.store;
  						var out22 = _this35.s0;
  						if(_this35.l != 0) {
  							_this35.s0 = _this35.s1;
  							_this35.s1 = _this35.s2;
  							_this35.s2 = _this35.s3;
  							_this35.s3 = _this35.s4;
  							_this35.s4 = _this35.s5;
  							_this35.s5 = null;
  							if(_this35.s6 != null) {
  								var _this36 = _this35.s6;
  								var out23 = _this36.s0;
  								if(_this36.l != 0) {
  									_this36.s0 = _this36.s1;
  									_this36.s1 = _this36.s2;
  									_this36.s2 = _this36.s3;
  									_this36.s3 = _this36.s4;
  									_this36.s4 = _this36.s5;
  									_this36.s5 = null;
  									if(_this36.s6 != null) {
  										var _this37 = _this36.s6;
  										var out24 = _this37.s0;
  										if(_this37.l != 0) {
  											_this37.s0 = _this37.s1;
  											_this37.s1 = _this37.s2;
  											_this37.s2 = _this37.s3;
  											_this37.s3 = _this37.s4;
  											_this37.s4 = _this37.s5;
  											_this37.s5 = null;
  											if(_this37.s6 != null) {
  												_this37.s5 = _this37.s6.shift();
  											}
  											_this37.l--;
  										}
  										_this36.s5 = out24;
  									}
  									_this36.l--;
  								}
  								_this35.s5 = out23;
  							}
  							_this35.l--;
  						}
  						var large1 = out22 | 0;
  						var _this38 = this.store;
  						var out25 = _this38.s0;
  						if(_this38.l != 0) {
  							_this38.s0 = _this38.s1;
  							_this38.s1 = _this38.s2;
  							_this38.s2 = _this38.s3;
  							_this38.s3 = _this38.s4;
  							_this38.s4 = _this38.s5;
  							_this38.s5 = null;
  							if(_this38.s6 != null) {
  								var _this39 = _this38.s6;
  								var out26 = _this39.s0;
  								if(_this39.l != 0) {
  									_this39.s0 = _this39.s1;
  									_this39.s1 = _this39.s2;
  									_this39.s2 = _this39.s3;
  									_this39.s3 = _this39.s4;
  									_this39.s4 = _this39.s5;
  									_this39.s5 = null;
  									if(_this39.s6 != null) {
  										var _this40 = _this39.s6;
  										var out27 = _this40.s0;
  										if(_this40.l != 0) {
  											_this40.s0 = _this40.s1;
  											_this40.s1 = _this40.s2;
  											_this40.s2 = _this40.s3;
  											_this40.s3 = _this40.s4;
  											_this40.s4 = _this40.s5;
  											_this40.s5 = null;
  											if(_this40.s6 != null) {
  												_this40.s5 = _this40.s6.shift();
  											}
  											_this40.l--;
  										}
  										_this39.s5 = out27;
  									}
  									_this39.l--;
  								}
  								_this38.s5 = out26;
  							}
  							_this38.l--;
  						}
  						var sweep1 = out25 | 0;
  						var _this41 = this.store;
  						var out28 = _this41.s0;
  						if(_this41.l != 0) {
  							_this41.s0 = _this41.s1;
  							_this41.s1 = _this41.s2;
  							_this41.s2 = _this41.s3;
  							_this41.s3 = _this41.s4;
  							_this41.s4 = _this41.s5;
  							_this41.s5 = null;
  							if(_this41.s6 != null) {
  								var _this42 = _this41.s6;
  								var out29 = _this42.s0;
  								if(_this42.l != 0) {
  									_this42.s0 = _this42.s1;
  									_this42.s1 = _this42.s2;
  									_this42.s2 = _this42.s3;
  									_this42.s3 = _this42.s4;
  									_this42.s4 = _this42.s5;
  									_this42.s5 = null;
  									if(_this42.s6 != null) {
  										_this42.s5 = _this42.s6.shift();
  									}
  									_this42.l--;
  								}
  								_this41.s5 = out29;
  							}
  							_this41.l--;
  						}
  						this.lastX = out28;
  						var _this43 = this.store;
  						var out30 = _this43.s0;
  						if(_this43.l != 0) {
  							_this43.s0 = _this43.s1;
  							_this43.s1 = _this43.s2;
  							_this43.s2 = _this43.s3;
  							_this43.s3 = _this43.s4;
  							_this43.s4 = _this43.s5;
  							_this43.s5 = null;
  							if(_this43.s6 != null) {
  								var _this44 = _this43.s6;
  								var out31 = _this44.s0;
  								if(_this44.l != 0) {
  									_this44.s0 = _this44.s1;
  									_this44.s1 = _this44.s2;
  									_this44.s2 = _this44.s3;
  									_this44.s3 = _this44.s4;
  									_this44.s4 = _this44.s5;
  									_this44.s5 = null;
  									if(_this44.s6 != null) {
  										_this44.s5 = _this44.s6.shift();
  									}
  									_this44.l--;
  								}
  								_this43.s5 = out31;
  							}
  							_this43.l--;
  						}
  						this.lastY = out30;
  						var sx3 = sx2;
  						var sy3 = sy2;
  						var phi3 = phi2;
  						var ex1 = this.lastX;
  						var ey1 = this.lastY;
  						var mx1 = (sx3 - ex1) / 2;
  						var my1 = (sy3 - ey1) / 2;
  						var ax1 = (sx3 + ex1) / 2;
  						var ay1 = (sy3 + ey1) / 2;
  						phi3 %= 360;
  						phi3 = phi3 * Math.PI / 180;
  						var sin1 = Math.sin(phi3);
  						var cos1 = Math.cos(phi3);
  						var x11 = mx1 * cos1 + my1 * sin1;
  						var y11 = -mx1 * sin1 + my1 * cos1;
  						var rx1 = Math.abs(xr1);
  						var ry1 = Math.abs(yr1);
  						var rxx1 = rx1 * rx1;
  						var ryy1 = ry1 * ry1;
  						var xx11 = x11 * x11;
  						var yy11 = y11 * y11;
  						var check1 = xx11 / rxx1 + yy11 / ryy1;
  						if(check1 > 1) {
  							rx1 *= Math.sqrt(check1);
  							ry1 *= Math.sqrt(check1);
  							rxx1 = rx1 * rx1;
  							ryy1 = ry1 * ry1;
  						}
  						var sign1 = large1 == sweep1 ? -1 : 1;
  						var sq1 = (rxx1 * ryy1 - rxx1 * yy11 - ryy1 * xx11) / (rxx1 * yy11 + ryy1 * xx11);
  						if(sq1 < 0) {
  							sq1 = 0;
  						}
  						var coef1 = sign1 * Math.sqrt(sq1);
  						var cx11 = coef1 * rx1 * y11 / ry1;
  						var cy11 = -coef1 * ry1 * x11 / rx1;
  						var cx2 = ax1 + cx11 * cos1 - cy11 * sin1;
  						var cy2 = ay1 + cx11 * sin1 + cy11 * cos1;
  						var phiSin1 = Math.sin(-phi3);
  						var phiCos1 = Math.cos(-phi3);
  						sx3 -= cx2;
  						sy3 -= cy2;
  						var dx2 = sx3;
  						var dy2 = sy3;
  						sx3 = dx2 * phiCos1 - dy2 * phiSin1;
  						sy3 = dx2 * phiSin1 + dy2 * phiCos1;
  						sx3 += cx2;
  						sy3 += cy2;
  						ex1 -= cx2;
  						ey1 -= cy2;
  						var dx3 = ex1;
  						var dy3 = ey1;
  						ex1 = dx3 * phiCos1 - dy3 * phiSin1;
  						ey1 = dx3 * phiSin1 + dy3 * phiCos1;
  						ex1 += cx2;
  						ey1 += cy2;
  						var alpha1 = Math.atan2(rx1 * (cy2 - sy3),ry1 * (cx2 - sx3)) - Math.PI;
  						var omega1 = Math.atan2(rx1 * (cy2 - ey1),ry1 * (cx2 - ex1)) - Math.PI;
  						var delta1 = alpha1 - omega1;
  						if(sweep1 == 1 && delta1 > 0) {
  							delta1 -= 2 * Math.PI;
  						} else if(sweep1 == 0 && delta1 < 0) {
  							delta1 += 2 * Math.PI;
  						}
  						var this2 = { cx : cx2, cy : cy2, rx : rx1, ry : ry1, alpha : alpha1, omega : omega1, delta : -delta1, phi : phi3, phiSin : Math.sin(phi3), phiCos : Math.cos(phi3)};
  						var ellipseData1 = this2;
  						var ellipse1 = new justPath_EllipseArc(ellipseData1);
  						ellipse1.lineRender(($_=this.pathContext,$bind($_,$_.moveTo)),($_=this.pathContext,$bind($_,$_.lineTo)),Math.PI / 18);
  					}
  				}
  				break;
  			case 66:
  				haxe_Log.trace("bearing - not implemented",{ fileName : "justPath/SvgPath.hx", lineNumber : 377, className : "justPath.SvgPath", methodName : "parse"});
  				throw haxe_Exception.thrown("bearing not supported please remove");
  			case 67:
  				var _this45 = this.store;
  				_this45.l = 0;
  				_this45.s0 = null;
  				_this45.s1 = null;
  				_this45.s2 = null;
  				_this45.s3 = null;
  				_this45.s4 = null;
  				_this45.s5 = null;
  				_this45.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp1 = "";
  				var exit1 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp1 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this46 = this.store;
  								var v6 = parseFloat(temp1);
  								switch(_this46.l) {
  								case 0:
  									_this46.s0 = v6;
  									break;
  								case 1:
  									_this46.s1 = v6;
  									break;
  								case 2:
  									_this46.s2 = v6;
  									break;
  								case 3:
  									_this46.s3 = v6;
  									break;
  								case 4:
  									_this46.s4 = v6;
  									break;
  								case 5:
  									_this46.s5 = v6;
  									break;
  								default:
  									if(_this46.s6 == null) {
  										_this46.s6 = new justPath_StoreF6();
  									}
  									var _this47 = _this46.s6;
  									switch(_this47.l) {
  									case 0:
  										_this47.s0 = v6;
  										break;
  									case 1:
  										_this47.s1 = v6;
  										break;
  									case 2:
  										_this47.s2 = v6;
  										break;
  									case 3:
  										_this47.s3 = v6;
  										break;
  									case 4:
  										_this47.s4 = v6;
  										break;
  									case 5:
  										_this47.s5 = v6;
  										break;
  									default:
  										if(_this47.s6 == null) {
  											_this47.s6 = new justPath_StoreF6();
  										}
  										_this47.s6.push(v6);
  									}
  									_this47.l++;
  								}
  								_this46.l++;
  							} else {
  								var _this48 = this.store;
  								var v7 = parseFloat(temp1);
  								switch(_this48.l) {
  								case 0:
  									_this48.s0 = v7;
  									break;
  								case 1:
  									_this48.s1 = v7;
  									break;
  								case 2:
  									_this48.s2 = v7;
  									break;
  								case 3:
  									_this48.s3 = v7;
  									break;
  								case 4:
  									_this48.s4 = v7;
  									break;
  								case 5:
  									_this48.s5 = v7;
  									break;
  								default:
  									if(_this48.s6 == null) {
  										_this48.s6 = new justPath_StoreF6();
  									}
  									var _this49 = _this48.s6;
  									switch(_this49.l) {
  									case 0:
  										_this49.s0 = v7;
  										break;
  									case 1:
  										_this49.s1 = v7;
  										break;
  									case 2:
  										_this49.s2 = v7;
  										break;
  									case 3:
  										_this49.s3 = v7;
  										break;
  									case 4:
  										_this49.s4 = v7;
  										break;
  									case 5:
  										_this49.s5 = v7;
  										break;
  									default:
  										if(_this49.s6 == null) {
  											_this49.s6 = new justPath_StoreF6();
  										}
  										_this49.s6.push(v7);
  									}
  									_this49.l++;
  								}
  								_this48.l++;
  							}
  							temp1 = "";
  						}
  						break;
  					case 45:
  						if(temp1 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this50 = this.store;
  								var v8 = parseFloat(temp1);
  								switch(_this50.l) {
  								case 0:
  									_this50.s0 = v8;
  									break;
  								case 1:
  									_this50.s1 = v8;
  									break;
  								case 2:
  									_this50.s2 = v8;
  									break;
  								case 3:
  									_this50.s3 = v8;
  									break;
  								case 4:
  									_this50.s4 = v8;
  									break;
  								case 5:
  									_this50.s5 = v8;
  									break;
  								default:
  									if(_this50.s6 == null) {
  										_this50.s6 = new justPath_StoreF6();
  									}
  									var _this51 = _this50.s6;
  									switch(_this51.l) {
  									case 0:
  										_this51.s0 = v8;
  										break;
  									case 1:
  										_this51.s1 = v8;
  										break;
  									case 2:
  										_this51.s2 = v8;
  										break;
  									case 3:
  										_this51.s3 = v8;
  										break;
  									case 4:
  										_this51.s4 = v8;
  										break;
  									case 5:
  										_this51.s5 = v8;
  										break;
  									default:
  										if(_this51.s6 == null) {
  											_this51.s6 = new justPath_StoreF6();
  										}
  										_this51.s6.push(v8);
  									}
  									_this51.l++;
  								}
  								_this50.l++;
  							} else {
  								var _this52 = this.store;
  								var v9 = parseFloat(temp1);
  								switch(_this52.l) {
  								case 0:
  									_this52.s0 = v9;
  									break;
  								case 1:
  									_this52.s1 = v9;
  									break;
  								case 2:
  									_this52.s2 = v9;
  									break;
  								case 3:
  									_this52.s3 = v9;
  									break;
  								case 4:
  									_this52.s4 = v9;
  									break;
  								case 5:
  									_this52.s5 = v9;
  									break;
  								default:
  									if(_this52.s6 == null) {
  										_this52.s6 = new justPath_StoreF6();
  									}
  									var _this53 = _this52.s6;
  									switch(_this53.l) {
  									case 0:
  										_this53.s0 = v9;
  										break;
  									case 1:
  										_this53.s1 = v9;
  										break;
  									case 2:
  										_this53.s2 = v9;
  										break;
  									case 3:
  										_this53.s3 = v9;
  										break;
  									case 4:
  										_this53.s4 = v9;
  										break;
  									case 5:
  										_this53.s5 = v9;
  										break;
  									default:
  										if(_this53.s6 == null) {
  											_this53.s6 = new justPath_StoreF6();
  										}
  										_this53.s6.push(v9);
  									}
  									_this53.l++;
  								}
  								_this52.l++;
  							}
  						}
  						temp1 = "-";
  						break;
  					case 46:
  						temp1 += ".";
  						break;
  					case 48:
  						temp1 += "0";
  						break;
  					case 49:
  						temp1 += "1";
  						break;
  					case 50:
  						temp1 += "2";
  						break;
  					case 51:
  						temp1 += "3";
  						break;
  					case 52:
  						temp1 += "4";
  						break;
  					case 53:
  						temp1 += "5";
  						break;
  					case 54:
  						temp1 += "6";
  						break;
  					case 55:
  						temp1 += "7";
  						break;
  					case 56:
  						temp1 += "8";
  						break;
  					case 57:
  						temp1 += "9";
  						break;
  					default:
  						if(temp1 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this54 = this.store;
  								var v10 = parseFloat(temp1);
  								switch(_this54.l) {
  								case 0:
  									_this54.s0 = v10;
  									break;
  								case 1:
  									_this54.s1 = v10;
  									break;
  								case 2:
  									_this54.s2 = v10;
  									break;
  								case 3:
  									_this54.s3 = v10;
  									break;
  								case 4:
  									_this54.s4 = v10;
  									break;
  								case 5:
  									_this54.s5 = v10;
  									break;
  								default:
  									if(_this54.s6 == null) {
  										_this54.s6 = new justPath_StoreF6();
  									}
  									var _this55 = _this54.s6;
  									switch(_this55.l) {
  									case 0:
  										_this55.s0 = v10;
  										break;
  									case 1:
  										_this55.s1 = v10;
  										break;
  									case 2:
  										_this55.s2 = v10;
  										break;
  									case 3:
  										_this55.s3 = v10;
  										break;
  									case 4:
  										_this55.s4 = v10;
  										break;
  									case 5:
  										_this55.s5 = v10;
  										break;
  									default:
  										if(_this55.s6 == null) {
  											_this55.s6 = new justPath_StoreF6();
  										}
  										_this55.s6.push(v10);
  									}
  									_this55.l++;
  								}
  								_this54.l++;
  							} else {
  								var _this56 = this.store;
  								var v11 = parseFloat(temp1);
  								switch(_this56.l) {
  								case 0:
  									_this56.s0 = v11;
  									break;
  								case 1:
  									_this56.s1 = v11;
  									break;
  								case 2:
  									_this56.s2 = v11;
  									break;
  								case 3:
  									_this56.s3 = v11;
  									break;
  								case 4:
  									_this56.s4 = v11;
  									break;
  								case 5:
  									_this56.s5 = v11;
  									break;
  								default:
  									if(_this56.s6 == null) {
  										_this56.s6 = new justPath_StoreF6();
  									}
  									var _this57 = _this56.s6;
  									switch(_this57.l) {
  									case 0:
  										_this57.s0 = v11;
  										break;
  									case 1:
  										_this57.s1 = v11;
  										break;
  									case 2:
  										_this57.s2 = v11;
  										break;
  									case 3:
  										_this57.s3 = v11;
  										break;
  									case 4:
  										_this57.s4 = v11;
  										break;
  									case 5:
  										_this57.s5 = v11;
  										break;
  									default:
  										if(_this57.s6 == null) {
  											_this57.s6 = new justPath_StoreF6();
  										}
  										_this57.s6.push(v11);
  									}
  									_this57.l++;
  								}
  								_this56.l++;
  							}
  							temp1 = "";
  						}
  						this.pos--;
  						exit1 = true;
  					}
  					if(exit1) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 4) {
  					this.controlX = this.store.s2;
  					this.controlY = this.store.s3;
  					this.lastX = this.store.s4;
  					this.lastY = this.store.s5;
  					this.pathContext.curveTo(this.store.s0,this.store.s1,this.controlX,this.controlY,this.lastX,this.lastY);
  				} else if(this.store.l > 4) {
  					while(this.store.l > 3) {
  						var _this58 = this.store;
  						var out32 = _this58.s0;
  						if(_this58.l != 0) {
  							_this58.s0 = _this58.s1;
  							_this58.s1 = _this58.s2;
  							_this58.s2 = _this58.s3;
  							_this58.s3 = _this58.s4;
  							_this58.s4 = _this58.s5;
  							_this58.s5 = null;
  							if(_this58.s6 != null) {
  								var _this59 = _this58.s6;
  								var out33 = _this59.s0;
  								if(_this59.l != 0) {
  									_this59.s0 = _this59.s1;
  									_this59.s1 = _this59.s2;
  									_this59.s2 = _this59.s3;
  									_this59.s3 = _this59.s4;
  									_this59.s4 = _this59.s5;
  									_this59.s5 = null;
  									if(_this59.s6 != null) {
  										_this59.s5 = _this59.s6.shift();
  									}
  									_this59.l--;
  								}
  								_this58.s5 = out33;
  							}
  							_this58.l--;
  						}
  						var firstX = out32;
  						var _this60 = this.store;
  						var out34 = _this60.s0;
  						if(_this60.l != 0) {
  							_this60.s0 = _this60.s1;
  							_this60.s1 = _this60.s2;
  							_this60.s2 = _this60.s3;
  							_this60.s3 = _this60.s4;
  							_this60.s4 = _this60.s5;
  							_this60.s5 = null;
  							if(_this60.s6 != null) {
  								var _this61 = _this60.s6;
  								var out35 = _this61.s0;
  								if(_this61.l != 0) {
  									_this61.s0 = _this61.s1;
  									_this61.s1 = _this61.s2;
  									_this61.s2 = _this61.s3;
  									_this61.s3 = _this61.s4;
  									_this61.s4 = _this61.s5;
  									_this61.s5 = null;
  									if(_this61.s6 != null) {
  										_this61.s5 = _this61.s6.shift();
  									}
  									_this61.l--;
  								}
  								_this60.s5 = out35;
  							}
  							_this60.l--;
  						}
  						var firstY = out34;
  						var _this62 = this.store;
  						var out36 = _this62.s0;
  						if(_this62.l != 0) {
  							_this62.s0 = _this62.s1;
  							_this62.s1 = _this62.s2;
  							_this62.s2 = _this62.s3;
  							_this62.s3 = _this62.s4;
  							_this62.s4 = _this62.s5;
  							_this62.s5 = null;
  							if(_this62.s6 != null) {
  								var _this63 = _this62.s6;
  								var out37 = _this63.s0;
  								if(_this63.l != 0) {
  									_this63.s0 = _this63.s1;
  									_this63.s1 = _this63.s2;
  									_this63.s2 = _this63.s3;
  									_this63.s3 = _this63.s4;
  									_this63.s4 = _this63.s5;
  									_this63.s5 = null;
  									if(_this63.s6 != null) {
  										_this63.s5 = _this63.s6.shift();
  									}
  									_this63.l--;
  								}
  								_this62.s5 = out37;
  							}
  							_this62.l--;
  						}
  						this.controlX = out36;
  						var _this64 = this.store;
  						var out38 = _this64.s0;
  						if(_this64.l != 0) {
  							_this64.s0 = _this64.s1;
  							_this64.s1 = _this64.s2;
  							_this64.s2 = _this64.s3;
  							_this64.s3 = _this64.s4;
  							_this64.s4 = _this64.s5;
  							_this64.s5 = null;
  							if(_this64.s6 != null) {
  								var _this65 = _this64.s6;
  								var out39 = _this65.s0;
  								if(_this65.l != 0) {
  									_this65.s0 = _this65.s1;
  									_this65.s1 = _this65.s2;
  									_this65.s2 = _this65.s3;
  									_this65.s3 = _this65.s4;
  									_this65.s4 = _this65.s5;
  									_this65.s5 = null;
  									if(_this65.s6 != null) {
  										_this65.s5 = _this65.s6.shift();
  									}
  									_this65.l--;
  								}
  								_this64.s5 = out39;
  							}
  							_this64.l--;
  						}
  						this.controlY = out38;
  						var _this66 = this.store;
  						var out40 = _this66.s0;
  						if(_this66.l != 0) {
  							_this66.s0 = _this66.s1;
  							_this66.s1 = _this66.s2;
  							_this66.s2 = _this66.s3;
  							_this66.s3 = _this66.s4;
  							_this66.s4 = _this66.s5;
  							_this66.s5 = null;
  							if(_this66.s6 != null) {
  								var _this67 = _this66.s6;
  								var out41 = _this67.s0;
  								if(_this67.l != 0) {
  									_this67.s0 = _this67.s1;
  									_this67.s1 = _this67.s2;
  									_this67.s2 = _this67.s3;
  									_this67.s3 = _this67.s4;
  									_this67.s4 = _this67.s5;
  									_this67.s5 = null;
  									if(_this67.s6 != null) {
  										_this67.s5 = _this67.s6.shift();
  									}
  									_this67.l--;
  								}
  								_this66.s5 = out41;
  							}
  							_this66.l--;
  						}
  						this.lastX = out40;
  						var _this68 = this.store;
  						var out42 = _this68.s0;
  						if(_this68.l != 0) {
  							_this68.s0 = _this68.s1;
  							_this68.s1 = _this68.s2;
  							_this68.s2 = _this68.s3;
  							_this68.s3 = _this68.s4;
  							_this68.s4 = _this68.s5;
  							_this68.s5 = null;
  							if(_this68.s6 != null) {
  								var _this69 = _this68.s6;
  								var out43 = _this69.s0;
  								if(_this69.l != 0) {
  									_this69.s0 = _this69.s1;
  									_this69.s1 = _this69.s2;
  									_this69.s2 = _this69.s3;
  									_this69.s3 = _this69.s4;
  									_this69.s4 = _this69.s5;
  									_this69.s5 = null;
  									if(_this69.s6 != null) {
  										_this69.s5 = _this69.s6.shift();
  									}
  									_this69.l--;
  								}
  								_this68.s5 = out43;
  							}
  							_this68.l--;
  						}
  						this.lastY = out42;
  						this.pathContext.curveTo(firstX,firstY,this.controlX,this.controlY,this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 72:
  				var process = false;
  				if(process == null) {
  					process = true;
  				}
  				var _this70 = this.store;
  				_this70.l = 0;
  				_this70.s0 = null;
  				_this70.s1 = null;
  				_this70.s2 = null;
  				_this70.s3 = null;
  				_this70.s4 = null;
  				_this70.s5 = null;
  				_this70.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp2 = "";
  				var exit2 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp2 != "") {
  							if(process) {
  								if((this.store.l & 1) == 0) {
  									var _this71 = this.store;
  									var v12 = parseFloat(temp2);
  									switch(_this71.l) {
  									case 0:
  										_this71.s0 = v12;
  										break;
  									case 1:
  										_this71.s1 = v12;
  										break;
  									case 2:
  										_this71.s2 = v12;
  										break;
  									case 3:
  										_this71.s3 = v12;
  										break;
  									case 4:
  										_this71.s4 = v12;
  										break;
  									case 5:
  										_this71.s5 = v12;
  										break;
  									default:
  										if(_this71.s6 == null) {
  											_this71.s6 = new justPath_StoreF6();
  										}
  										var _this72 = _this71.s6;
  										switch(_this72.l) {
  										case 0:
  											_this72.s0 = v12;
  											break;
  										case 1:
  											_this72.s1 = v12;
  											break;
  										case 2:
  											_this72.s2 = v12;
  											break;
  										case 3:
  											_this72.s3 = v12;
  											break;
  										case 4:
  											_this72.s4 = v12;
  											break;
  										case 5:
  											_this72.s5 = v12;
  											break;
  										default:
  											if(_this72.s6 == null) {
  												_this72.s6 = new justPath_StoreF6();
  											}
  											_this72.s6.push(v12);
  										}
  										_this72.l++;
  									}
  									_this71.l++;
  								} else {
  									var _this73 = this.store;
  									var v13 = parseFloat(temp2);
  									switch(_this73.l) {
  									case 0:
  										_this73.s0 = v13;
  										break;
  									case 1:
  										_this73.s1 = v13;
  										break;
  									case 2:
  										_this73.s2 = v13;
  										break;
  									case 3:
  										_this73.s3 = v13;
  										break;
  									case 4:
  										_this73.s4 = v13;
  										break;
  									case 5:
  										_this73.s5 = v13;
  										break;
  									default:
  										if(_this73.s6 == null) {
  											_this73.s6 = new justPath_StoreF6();
  										}
  										var _this74 = _this73.s6;
  										switch(_this74.l) {
  										case 0:
  											_this74.s0 = v13;
  											break;
  										case 1:
  											_this74.s1 = v13;
  											break;
  										case 2:
  											_this74.s2 = v13;
  											break;
  										case 3:
  											_this74.s3 = v13;
  											break;
  										case 4:
  											_this74.s4 = v13;
  											break;
  										case 5:
  											_this74.s5 = v13;
  											break;
  										default:
  											if(_this74.s6 == null) {
  												_this74.s6 = new justPath_StoreF6();
  											}
  											_this74.s6.push(v13);
  										}
  										_this74.l++;
  									}
  									_this73.l++;
  								}
  							} else {
  								var _this75 = this.store;
  								var v14 = parseFloat(temp2);
  								switch(_this75.l) {
  								case 0:
  									_this75.s0 = v14;
  									break;
  								case 1:
  									_this75.s1 = v14;
  									break;
  								case 2:
  									_this75.s2 = v14;
  									break;
  								case 3:
  									_this75.s3 = v14;
  									break;
  								case 4:
  									_this75.s4 = v14;
  									break;
  								case 5:
  									_this75.s5 = v14;
  									break;
  								default:
  									if(_this75.s6 == null) {
  										_this75.s6 = new justPath_StoreF6();
  									}
  									var _this76 = _this75.s6;
  									switch(_this76.l) {
  									case 0:
  										_this76.s0 = v14;
  										break;
  									case 1:
  										_this76.s1 = v14;
  										break;
  									case 2:
  										_this76.s2 = v14;
  										break;
  									case 3:
  										_this76.s3 = v14;
  										break;
  									case 4:
  										_this76.s4 = v14;
  										break;
  									case 5:
  										_this76.s5 = v14;
  										break;
  									default:
  										if(_this76.s6 == null) {
  											_this76.s6 = new justPath_StoreF6();
  										}
  										_this76.s6.push(v14);
  									}
  									_this76.l++;
  								}
  								_this75.l++;
  							}
  							temp2 = "";
  						}
  						break;
  					case 45:
  						if(temp2 != "") {
  							if(process) {
  								if((this.store.l & 1) == 0) {
  									var _this77 = this.store;
  									var v15 = parseFloat(temp2);
  									switch(_this77.l) {
  									case 0:
  										_this77.s0 = v15;
  										break;
  									case 1:
  										_this77.s1 = v15;
  										break;
  									case 2:
  										_this77.s2 = v15;
  										break;
  									case 3:
  										_this77.s3 = v15;
  										break;
  									case 4:
  										_this77.s4 = v15;
  										break;
  									case 5:
  										_this77.s5 = v15;
  										break;
  									default:
  										if(_this77.s6 == null) {
  											_this77.s6 = new justPath_StoreF6();
  										}
  										var _this78 = _this77.s6;
  										switch(_this78.l) {
  										case 0:
  											_this78.s0 = v15;
  											break;
  										case 1:
  											_this78.s1 = v15;
  											break;
  										case 2:
  											_this78.s2 = v15;
  											break;
  										case 3:
  											_this78.s3 = v15;
  											break;
  										case 4:
  											_this78.s4 = v15;
  											break;
  										case 5:
  											_this78.s5 = v15;
  											break;
  										default:
  											if(_this78.s6 == null) {
  												_this78.s6 = new justPath_StoreF6();
  											}
  											_this78.s6.push(v15);
  										}
  										_this78.l++;
  									}
  									_this77.l++;
  								} else {
  									var _this79 = this.store;
  									var v16 = parseFloat(temp2);
  									switch(_this79.l) {
  									case 0:
  										_this79.s0 = v16;
  										break;
  									case 1:
  										_this79.s1 = v16;
  										break;
  									case 2:
  										_this79.s2 = v16;
  										break;
  									case 3:
  										_this79.s3 = v16;
  										break;
  									case 4:
  										_this79.s4 = v16;
  										break;
  									case 5:
  										_this79.s5 = v16;
  										break;
  									default:
  										if(_this79.s6 == null) {
  											_this79.s6 = new justPath_StoreF6();
  										}
  										var _this80 = _this79.s6;
  										switch(_this80.l) {
  										case 0:
  											_this80.s0 = v16;
  											break;
  										case 1:
  											_this80.s1 = v16;
  											break;
  										case 2:
  											_this80.s2 = v16;
  											break;
  										case 3:
  											_this80.s3 = v16;
  											break;
  										case 4:
  											_this80.s4 = v16;
  											break;
  										case 5:
  											_this80.s5 = v16;
  											break;
  										default:
  											if(_this80.s6 == null) {
  												_this80.s6 = new justPath_StoreF6();
  											}
  											_this80.s6.push(v16);
  										}
  										_this80.l++;
  									}
  									_this79.l++;
  								}
  							} else {
  								var _this81 = this.store;
  								var v17 = parseFloat(temp2);
  								switch(_this81.l) {
  								case 0:
  									_this81.s0 = v17;
  									break;
  								case 1:
  									_this81.s1 = v17;
  									break;
  								case 2:
  									_this81.s2 = v17;
  									break;
  								case 3:
  									_this81.s3 = v17;
  									break;
  								case 4:
  									_this81.s4 = v17;
  									break;
  								case 5:
  									_this81.s5 = v17;
  									break;
  								default:
  									if(_this81.s6 == null) {
  										_this81.s6 = new justPath_StoreF6();
  									}
  									var _this82 = _this81.s6;
  									switch(_this82.l) {
  									case 0:
  										_this82.s0 = v17;
  										break;
  									case 1:
  										_this82.s1 = v17;
  										break;
  									case 2:
  										_this82.s2 = v17;
  										break;
  									case 3:
  										_this82.s3 = v17;
  										break;
  									case 4:
  										_this82.s4 = v17;
  										break;
  									case 5:
  										_this82.s5 = v17;
  										break;
  									default:
  										if(_this82.s6 == null) {
  											_this82.s6 = new justPath_StoreF6();
  										}
  										_this82.s6.push(v17);
  									}
  									_this82.l++;
  								}
  								_this81.l++;
  							}
  						}
  						temp2 = "-";
  						break;
  					case 46:
  						temp2 += ".";
  						break;
  					case 48:
  						temp2 += "0";
  						break;
  					case 49:
  						temp2 += "1";
  						break;
  					case 50:
  						temp2 += "2";
  						break;
  					case 51:
  						temp2 += "3";
  						break;
  					case 52:
  						temp2 += "4";
  						break;
  					case 53:
  						temp2 += "5";
  						break;
  					case 54:
  						temp2 += "6";
  						break;
  					case 55:
  						temp2 += "7";
  						break;
  					case 56:
  						temp2 += "8";
  						break;
  					case 57:
  						temp2 += "9";
  						break;
  					default:
  						if(temp2 != "") {
  							if(process) {
  								if((this.store.l & 1) == 0) {
  									var _this83 = this.store;
  									var v18 = parseFloat(temp2);
  									switch(_this83.l) {
  									case 0:
  										_this83.s0 = v18;
  										break;
  									case 1:
  										_this83.s1 = v18;
  										break;
  									case 2:
  										_this83.s2 = v18;
  										break;
  									case 3:
  										_this83.s3 = v18;
  										break;
  									case 4:
  										_this83.s4 = v18;
  										break;
  									case 5:
  										_this83.s5 = v18;
  										break;
  									default:
  										if(_this83.s6 == null) {
  											_this83.s6 = new justPath_StoreF6();
  										}
  										var _this84 = _this83.s6;
  										switch(_this84.l) {
  										case 0:
  											_this84.s0 = v18;
  											break;
  										case 1:
  											_this84.s1 = v18;
  											break;
  										case 2:
  											_this84.s2 = v18;
  											break;
  										case 3:
  											_this84.s3 = v18;
  											break;
  										case 4:
  											_this84.s4 = v18;
  											break;
  										case 5:
  											_this84.s5 = v18;
  											break;
  										default:
  											if(_this84.s6 == null) {
  												_this84.s6 = new justPath_StoreF6();
  											}
  											_this84.s6.push(v18);
  										}
  										_this84.l++;
  									}
  									_this83.l++;
  								} else {
  									var _this85 = this.store;
  									var v19 = parseFloat(temp2);
  									switch(_this85.l) {
  									case 0:
  										_this85.s0 = v19;
  										break;
  									case 1:
  										_this85.s1 = v19;
  										break;
  									case 2:
  										_this85.s2 = v19;
  										break;
  									case 3:
  										_this85.s3 = v19;
  										break;
  									case 4:
  										_this85.s4 = v19;
  										break;
  									case 5:
  										_this85.s5 = v19;
  										break;
  									default:
  										if(_this85.s6 == null) {
  											_this85.s6 = new justPath_StoreF6();
  										}
  										var _this86 = _this85.s6;
  										switch(_this86.l) {
  										case 0:
  											_this86.s0 = v19;
  											break;
  										case 1:
  											_this86.s1 = v19;
  											break;
  										case 2:
  											_this86.s2 = v19;
  											break;
  										case 3:
  											_this86.s3 = v19;
  											break;
  										case 4:
  											_this86.s4 = v19;
  											break;
  										case 5:
  											_this86.s5 = v19;
  											break;
  										default:
  											if(_this86.s6 == null) {
  												_this86.s6 = new justPath_StoreF6();
  											}
  											_this86.s6.push(v19);
  										}
  										_this86.l++;
  									}
  									_this85.l++;
  								}
  							} else {
  								var _this87 = this.store;
  								var v20 = parseFloat(temp2);
  								switch(_this87.l) {
  								case 0:
  									_this87.s0 = v20;
  									break;
  								case 1:
  									_this87.s1 = v20;
  									break;
  								case 2:
  									_this87.s2 = v20;
  									break;
  								case 3:
  									_this87.s3 = v20;
  									break;
  								case 4:
  									_this87.s4 = v20;
  									break;
  								case 5:
  									_this87.s5 = v20;
  									break;
  								default:
  									if(_this87.s6 == null) {
  										_this87.s6 = new justPath_StoreF6();
  									}
  									var _this88 = _this87.s6;
  									switch(_this88.l) {
  									case 0:
  										_this88.s0 = v20;
  										break;
  									case 1:
  										_this88.s1 = v20;
  										break;
  									case 2:
  										_this88.s2 = v20;
  										break;
  									case 3:
  										_this88.s3 = v20;
  										break;
  									case 4:
  										_this88.s4 = v20;
  										break;
  									case 5:
  										_this88.s5 = v20;
  										break;
  									default:
  										if(_this88.s6 == null) {
  											_this88.s6 = new justPath_StoreF6();
  										}
  										_this88.s6.push(v20);
  									}
  									_this88.l++;
  								}
  								_this87.l++;
  							}
  							temp2 = "";
  						}
  						this.pos--;
  						exit2 = true;
  					}
  					if(exit2) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 1) {
  					this.lastX = this.store.s0;
  					this.pathContext.lineTo(this.lastX,this.lastY);
  				} else if(this.store.l > 1) {
  					while(this.store.l > 0) {
  						var _this89 = this.store;
  						var out44 = _this89.s0;
  						if(_this89.l != 0) {
  							_this89.s0 = _this89.s1;
  							_this89.s1 = _this89.s2;
  							_this89.s2 = _this89.s3;
  							_this89.s3 = _this89.s4;
  							_this89.s4 = _this89.s5;
  							_this89.s5 = null;
  							if(_this89.s6 != null) {
  								var _this90 = _this89.s6;
  								var out45 = _this90.s0;
  								if(_this90.l != 0) {
  									_this90.s0 = _this90.s1;
  									_this90.s1 = _this90.s2;
  									_this90.s2 = _this90.s3;
  									_this90.s3 = _this90.s4;
  									_this90.s4 = _this90.s5;
  									_this90.s5 = null;
  									if(_this90.s6 != null) {
  										_this90.s5 = _this90.s6.shift();
  									}
  									_this90.l--;
  								}
  								_this89.s5 = out45;
  							}
  							_this89.l--;
  						}
  						this.lastX = out44;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 76:
  				var _this91 = this.store;
  				_this91.l = 0;
  				_this91.s0 = null;
  				_this91.s1 = null;
  				_this91.s2 = null;
  				_this91.s3 = null;
  				_this91.s4 = null;
  				_this91.s5 = null;
  				_this91.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp3 = "";
  				var exit3 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp3 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this92 = this.store;
  								var v21 = parseFloat(temp3);
  								switch(_this92.l) {
  								case 0:
  									_this92.s0 = v21;
  									break;
  								case 1:
  									_this92.s1 = v21;
  									break;
  								case 2:
  									_this92.s2 = v21;
  									break;
  								case 3:
  									_this92.s3 = v21;
  									break;
  								case 4:
  									_this92.s4 = v21;
  									break;
  								case 5:
  									_this92.s5 = v21;
  									break;
  								default:
  									if(_this92.s6 == null) {
  										_this92.s6 = new justPath_StoreF6();
  									}
  									var _this93 = _this92.s6;
  									switch(_this93.l) {
  									case 0:
  										_this93.s0 = v21;
  										break;
  									case 1:
  										_this93.s1 = v21;
  										break;
  									case 2:
  										_this93.s2 = v21;
  										break;
  									case 3:
  										_this93.s3 = v21;
  										break;
  									case 4:
  										_this93.s4 = v21;
  										break;
  									case 5:
  										_this93.s5 = v21;
  										break;
  									default:
  										if(_this93.s6 == null) {
  											_this93.s6 = new justPath_StoreF6();
  										}
  										_this93.s6.push(v21);
  									}
  									_this93.l++;
  								}
  								_this92.l++;
  							} else {
  								var _this94 = this.store;
  								var v22 = parseFloat(temp3);
  								switch(_this94.l) {
  								case 0:
  									_this94.s0 = v22;
  									break;
  								case 1:
  									_this94.s1 = v22;
  									break;
  								case 2:
  									_this94.s2 = v22;
  									break;
  								case 3:
  									_this94.s3 = v22;
  									break;
  								case 4:
  									_this94.s4 = v22;
  									break;
  								case 5:
  									_this94.s5 = v22;
  									break;
  								default:
  									if(_this94.s6 == null) {
  										_this94.s6 = new justPath_StoreF6();
  									}
  									var _this95 = _this94.s6;
  									switch(_this95.l) {
  									case 0:
  										_this95.s0 = v22;
  										break;
  									case 1:
  										_this95.s1 = v22;
  										break;
  									case 2:
  										_this95.s2 = v22;
  										break;
  									case 3:
  										_this95.s3 = v22;
  										break;
  									case 4:
  										_this95.s4 = v22;
  										break;
  									case 5:
  										_this95.s5 = v22;
  										break;
  									default:
  										if(_this95.s6 == null) {
  											_this95.s6 = new justPath_StoreF6();
  										}
  										_this95.s6.push(v22);
  									}
  									_this95.l++;
  								}
  								_this94.l++;
  							}
  							temp3 = "";
  						}
  						break;
  					case 45:
  						if(temp3 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this96 = this.store;
  								var v23 = parseFloat(temp3);
  								switch(_this96.l) {
  								case 0:
  									_this96.s0 = v23;
  									break;
  								case 1:
  									_this96.s1 = v23;
  									break;
  								case 2:
  									_this96.s2 = v23;
  									break;
  								case 3:
  									_this96.s3 = v23;
  									break;
  								case 4:
  									_this96.s4 = v23;
  									break;
  								case 5:
  									_this96.s5 = v23;
  									break;
  								default:
  									if(_this96.s6 == null) {
  										_this96.s6 = new justPath_StoreF6();
  									}
  									var _this97 = _this96.s6;
  									switch(_this97.l) {
  									case 0:
  										_this97.s0 = v23;
  										break;
  									case 1:
  										_this97.s1 = v23;
  										break;
  									case 2:
  										_this97.s2 = v23;
  										break;
  									case 3:
  										_this97.s3 = v23;
  										break;
  									case 4:
  										_this97.s4 = v23;
  										break;
  									case 5:
  										_this97.s5 = v23;
  										break;
  									default:
  										if(_this97.s6 == null) {
  											_this97.s6 = new justPath_StoreF6();
  										}
  										_this97.s6.push(v23);
  									}
  									_this97.l++;
  								}
  								_this96.l++;
  							} else {
  								var _this98 = this.store;
  								var v24 = parseFloat(temp3);
  								switch(_this98.l) {
  								case 0:
  									_this98.s0 = v24;
  									break;
  								case 1:
  									_this98.s1 = v24;
  									break;
  								case 2:
  									_this98.s2 = v24;
  									break;
  								case 3:
  									_this98.s3 = v24;
  									break;
  								case 4:
  									_this98.s4 = v24;
  									break;
  								case 5:
  									_this98.s5 = v24;
  									break;
  								default:
  									if(_this98.s6 == null) {
  										_this98.s6 = new justPath_StoreF6();
  									}
  									var _this99 = _this98.s6;
  									switch(_this99.l) {
  									case 0:
  										_this99.s0 = v24;
  										break;
  									case 1:
  										_this99.s1 = v24;
  										break;
  									case 2:
  										_this99.s2 = v24;
  										break;
  									case 3:
  										_this99.s3 = v24;
  										break;
  									case 4:
  										_this99.s4 = v24;
  										break;
  									case 5:
  										_this99.s5 = v24;
  										break;
  									default:
  										if(_this99.s6 == null) {
  											_this99.s6 = new justPath_StoreF6();
  										}
  										_this99.s6.push(v24);
  									}
  									_this99.l++;
  								}
  								_this98.l++;
  							}
  						}
  						temp3 = "-";
  						break;
  					case 46:
  						temp3 += ".";
  						break;
  					case 48:
  						temp3 += "0";
  						break;
  					case 49:
  						temp3 += "1";
  						break;
  					case 50:
  						temp3 += "2";
  						break;
  					case 51:
  						temp3 += "3";
  						break;
  					case 52:
  						temp3 += "4";
  						break;
  					case 53:
  						temp3 += "5";
  						break;
  					case 54:
  						temp3 += "6";
  						break;
  					case 55:
  						temp3 += "7";
  						break;
  					case 56:
  						temp3 += "8";
  						break;
  					case 57:
  						temp3 += "9";
  						break;
  					default:
  						if(temp3 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this100 = this.store;
  								var v25 = parseFloat(temp3);
  								switch(_this100.l) {
  								case 0:
  									_this100.s0 = v25;
  									break;
  								case 1:
  									_this100.s1 = v25;
  									break;
  								case 2:
  									_this100.s2 = v25;
  									break;
  								case 3:
  									_this100.s3 = v25;
  									break;
  								case 4:
  									_this100.s4 = v25;
  									break;
  								case 5:
  									_this100.s5 = v25;
  									break;
  								default:
  									if(_this100.s6 == null) {
  										_this100.s6 = new justPath_StoreF6();
  									}
  									var _this101 = _this100.s6;
  									switch(_this101.l) {
  									case 0:
  										_this101.s0 = v25;
  										break;
  									case 1:
  										_this101.s1 = v25;
  										break;
  									case 2:
  										_this101.s2 = v25;
  										break;
  									case 3:
  										_this101.s3 = v25;
  										break;
  									case 4:
  										_this101.s4 = v25;
  										break;
  									case 5:
  										_this101.s5 = v25;
  										break;
  									default:
  										if(_this101.s6 == null) {
  											_this101.s6 = new justPath_StoreF6();
  										}
  										_this101.s6.push(v25);
  									}
  									_this101.l++;
  								}
  								_this100.l++;
  							} else {
  								var _this102 = this.store;
  								var v26 = parseFloat(temp3);
  								switch(_this102.l) {
  								case 0:
  									_this102.s0 = v26;
  									break;
  								case 1:
  									_this102.s1 = v26;
  									break;
  								case 2:
  									_this102.s2 = v26;
  									break;
  								case 3:
  									_this102.s3 = v26;
  									break;
  								case 4:
  									_this102.s4 = v26;
  									break;
  								case 5:
  									_this102.s5 = v26;
  									break;
  								default:
  									if(_this102.s6 == null) {
  										_this102.s6 = new justPath_StoreF6();
  									}
  									var _this103 = _this102.s6;
  									switch(_this103.l) {
  									case 0:
  										_this103.s0 = v26;
  										break;
  									case 1:
  										_this103.s1 = v26;
  										break;
  									case 2:
  										_this103.s2 = v26;
  										break;
  									case 3:
  										_this103.s3 = v26;
  										break;
  									case 4:
  										_this103.s4 = v26;
  										break;
  									case 5:
  										_this103.s5 = v26;
  										break;
  									default:
  										if(_this103.s6 == null) {
  											_this103.s6 = new justPath_StoreF6();
  										}
  										_this103.s6.push(v26);
  									}
  									_this103.l++;
  								}
  								_this102.l++;
  							}
  							temp3 = "";
  						}
  						this.pos--;
  						exit3 = true;
  					}
  					if(exit3) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 2) {
  					this.lastX = this.store.s0;
  					this.lastY = this.store.s1;
  					this.pathContext.lineTo(this.lastX,this.lastY);
  				} else if(this.store.l > 2) {
  					while(this.store.l > 1) {
  						var _this104 = this.store;
  						var out46 = _this104.s0;
  						if(_this104.l != 0) {
  							_this104.s0 = _this104.s1;
  							_this104.s1 = _this104.s2;
  							_this104.s2 = _this104.s3;
  							_this104.s3 = _this104.s4;
  							_this104.s4 = _this104.s5;
  							_this104.s5 = null;
  							if(_this104.s6 != null) {
  								var _this105 = _this104.s6;
  								var out47 = _this105.s0;
  								if(_this105.l != 0) {
  									_this105.s0 = _this105.s1;
  									_this105.s1 = _this105.s2;
  									_this105.s2 = _this105.s3;
  									_this105.s3 = _this105.s4;
  									_this105.s4 = _this105.s5;
  									_this105.s5 = null;
  									if(_this105.s6 != null) {
  										_this105.s5 = _this105.s6.shift();
  									}
  									_this105.l--;
  								}
  								_this104.s5 = out47;
  							}
  							_this104.l--;
  						}
  						this.lastX = out46;
  						var _this106 = this.store;
  						var out48 = _this106.s0;
  						if(_this106.l != 0) {
  							_this106.s0 = _this106.s1;
  							_this106.s1 = _this106.s2;
  							_this106.s2 = _this106.s3;
  							_this106.s3 = _this106.s4;
  							_this106.s4 = _this106.s5;
  							_this106.s5 = null;
  							if(_this106.s6 != null) {
  								var _this107 = _this106.s6;
  								var out49 = _this107.s0;
  								if(_this107.l != 0) {
  									_this107.s0 = _this107.s1;
  									_this107.s1 = _this107.s2;
  									_this107.s2 = _this107.s3;
  									_this107.s3 = _this107.s4;
  									_this107.s4 = _this107.s5;
  									_this107.s5 = null;
  									if(_this107.s6 != null) {
  										_this107.s5 = _this107.s6.shift();
  									}
  									_this107.l--;
  								}
  								_this106.s5 = out49;
  							}
  							_this106.l--;
  						}
  						this.lastY = out48;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 77:
  				var _this108 = this.store;
  				_this108.l = 0;
  				_this108.s0 = null;
  				_this108.s1 = null;
  				_this108.s2 = null;
  				_this108.s3 = null;
  				_this108.s4 = null;
  				_this108.s5 = null;
  				_this108.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp4 = "";
  				var exit4 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp4 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this109 = this.store;
  								var v27 = parseFloat(temp4);
  								switch(_this109.l) {
  								case 0:
  									_this109.s0 = v27;
  									break;
  								case 1:
  									_this109.s1 = v27;
  									break;
  								case 2:
  									_this109.s2 = v27;
  									break;
  								case 3:
  									_this109.s3 = v27;
  									break;
  								case 4:
  									_this109.s4 = v27;
  									break;
  								case 5:
  									_this109.s5 = v27;
  									break;
  								default:
  									if(_this109.s6 == null) {
  										_this109.s6 = new justPath_StoreF6();
  									}
  									var _this110 = _this109.s6;
  									switch(_this110.l) {
  									case 0:
  										_this110.s0 = v27;
  										break;
  									case 1:
  										_this110.s1 = v27;
  										break;
  									case 2:
  										_this110.s2 = v27;
  										break;
  									case 3:
  										_this110.s3 = v27;
  										break;
  									case 4:
  										_this110.s4 = v27;
  										break;
  									case 5:
  										_this110.s5 = v27;
  										break;
  									default:
  										if(_this110.s6 == null) {
  											_this110.s6 = new justPath_StoreF6();
  										}
  										_this110.s6.push(v27);
  									}
  									_this110.l++;
  								}
  								_this109.l++;
  							} else {
  								var _this111 = this.store;
  								var v28 = parseFloat(temp4);
  								switch(_this111.l) {
  								case 0:
  									_this111.s0 = v28;
  									break;
  								case 1:
  									_this111.s1 = v28;
  									break;
  								case 2:
  									_this111.s2 = v28;
  									break;
  								case 3:
  									_this111.s3 = v28;
  									break;
  								case 4:
  									_this111.s4 = v28;
  									break;
  								case 5:
  									_this111.s5 = v28;
  									break;
  								default:
  									if(_this111.s6 == null) {
  										_this111.s6 = new justPath_StoreF6();
  									}
  									var _this112 = _this111.s6;
  									switch(_this112.l) {
  									case 0:
  										_this112.s0 = v28;
  										break;
  									case 1:
  										_this112.s1 = v28;
  										break;
  									case 2:
  										_this112.s2 = v28;
  										break;
  									case 3:
  										_this112.s3 = v28;
  										break;
  									case 4:
  										_this112.s4 = v28;
  										break;
  									case 5:
  										_this112.s5 = v28;
  										break;
  									default:
  										if(_this112.s6 == null) {
  											_this112.s6 = new justPath_StoreF6();
  										}
  										_this112.s6.push(v28);
  									}
  									_this112.l++;
  								}
  								_this111.l++;
  							}
  							temp4 = "";
  						}
  						break;
  					case 45:
  						if(temp4 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this113 = this.store;
  								var v29 = parseFloat(temp4);
  								switch(_this113.l) {
  								case 0:
  									_this113.s0 = v29;
  									break;
  								case 1:
  									_this113.s1 = v29;
  									break;
  								case 2:
  									_this113.s2 = v29;
  									break;
  								case 3:
  									_this113.s3 = v29;
  									break;
  								case 4:
  									_this113.s4 = v29;
  									break;
  								case 5:
  									_this113.s5 = v29;
  									break;
  								default:
  									if(_this113.s6 == null) {
  										_this113.s6 = new justPath_StoreF6();
  									}
  									var _this114 = _this113.s6;
  									switch(_this114.l) {
  									case 0:
  										_this114.s0 = v29;
  										break;
  									case 1:
  										_this114.s1 = v29;
  										break;
  									case 2:
  										_this114.s2 = v29;
  										break;
  									case 3:
  										_this114.s3 = v29;
  										break;
  									case 4:
  										_this114.s4 = v29;
  										break;
  									case 5:
  										_this114.s5 = v29;
  										break;
  									default:
  										if(_this114.s6 == null) {
  											_this114.s6 = new justPath_StoreF6();
  										}
  										_this114.s6.push(v29);
  									}
  									_this114.l++;
  								}
  								_this113.l++;
  							} else {
  								var _this115 = this.store;
  								var v30 = parseFloat(temp4);
  								switch(_this115.l) {
  								case 0:
  									_this115.s0 = v30;
  									break;
  								case 1:
  									_this115.s1 = v30;
  									break;
  								case 2:
  									_this115.s2 = v30;
  									break;
  								case 3:
  									_this115.s3 = v30;
  									break;
  								case 4:
  									_this115.s4 = v30;
  									break;
  								case 5:
  									_this115.s5 = v30;
  									break;
  								default:
  									if(_this115.s6 == null) {
  										_this115.s6 = new justPath_StoreF6();
  									}
  									var _this116 = _this115.s6;
  									switch(_this116.l) {
  									case 0:
  										_this116.s0 = v30;
  										break;
  									case 1:
  										_this116.s1 = v30;
  										break;
  									case 2:
  										_this116.s2 = v30;
  										break;
  									case 3:
  										_this116.s3 = v30;
  										break;
  									case 4:
  										_this116.s4 = v30;
  										break;
  									case 5:
  										_this116.s5 = v30;
  										break;
  									default:
  										if(_this116.s6 == null) {
  											_this116.s6 = new justPath_StoreF6();
  										}
  										_this116.s6.push(v30);
  									}
  									_this116.l++;
  								}
  								_this115.l++;
  							}
  						}
  						temp4 = "-";
  						break;
  					case 46:
  						temp4 += ".";
  						break;
  					case 48:
  						temp4 += "0";
  						break;
  					case 49:
  						temp4 += "1";
  						break;
  					case 50:
  						temp4 += "2";
  						break;
  					case 51:
  						temp4 += "3";
  						break;
  					case 52:
  						temp4 += "4";
  						break;
  					case 53:
  						temp4 += "5";
  						break;
  					case 54:
  						temp4 += "6";
  						break;
  					case 55:
  						temp4 += "7";
  						break;
  					case 56:
  						temp4 += "8";
  						break;
  					case 57:
  						temp4 += "9";
  						break;
  					default:
  						if(temp4 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this117 = this.store;
  								var v31 = parseFloat(temp4);
  								switch(_this117.l) {
  								case 0:
  									_this117.s0 = v31;
  									break;
  								case 1:
  									_this117.s1 = v31;
  									break;
  								case 2:
  									_this117.s2 = v31;
  									break;
  								case 3:
  									_this117.s3 = v31;
  									break;
  								case 4:
  									_this117.s4 = v31;
  									break;
  								case 5:
  									_this117.s5 = v31;
  									break;
  								default:
  									if(_this117.s6 == null) {
  										_this117.s6 = new justPath_StoreF6();
  									}
  									var _this118 = _this117.s6;
  									switch(_this118.l) {
  									case 0:
  										_this118.s0 = v31;
  										break;
  									case 1:
  										_this118.s1 = v31;
  										break;
  									case 2:
  										_this118.s2 = v31;
  										break;
  									case 3:
  										_this118.s3 = v31;
  										break;
  									case 4:
  										_this118.s4 = v31;
  										break;
  									case 5:
  										_this118.s5 = v31;
  										break;
  									default:
  										if(_this118.s6 == null) {
  											_this118.s6 = new justPath_StoreF6();
  										}
  										_this118.s6.push(v31);
  									}
  									_this118.l++;
  								}
  								_this117.l++;
  							} else {
  								var _this119 = this.store;
  								var v32 = parseFloat(temp4);
  								switch(_this119.l) {
  								case 0:
  									_this119.s0 = v32;
  									break;
  								case 1:
  									_this119.s1 = v32;
  									break;
  								case 2:
  									_this119.s2 = v32;
  									break;
  								case 3:
  									_this119.s3 = v32;
  									break;
  								case 4:
  									_this119.s4 = v32;
  									break;
  								case 5:
  									_this119.s5 = v32;
  									break;
  								default:
  									if(_this119.s6 == null) {
  										_this119.s6 = new justPath_StoreF6();
  									}
  									var _this120 = _this119.s6;
  									switch(_this120.l) {
  									case 0:
  										_this120.s0 = v32;
  										break;
  									case 1:
  										_this120.s1 = v32;
  										break;
  									case 2:
  										_this120.s2 = v32;
  										break;
  									case 3:
  										_this120.s3 = v32;
  										break;
  									case 4:
  										_this120.s4 = v32;
  										break;
  									case 5:
  										_this120.s5 = v32;
  										break;
  									default:
  										if(_this120.s6 == null) {
  											_this120.s6 = new justPath_StoreF6();
  										}
  										_this120.s6.push(v32);
  									}
  									_this120.l++;
  								}
  								_this119.l++;
  							}
  							temp4 = "";
  						}
  						this.pos--;
  						exit4 = true;
  					}
  					if(exit4) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 2) {
  					this.lastX = this.store.s0;
  					this.lastY = this.store.s1;
  					this.pathContext.moveTo(this.lastX,this.lastY);
  				} else if(this.store.l > 2) {
  					var _this121 = this.store;
  					var out50 = _this121.s0;
  					if(_this121.l != 0) {
  						_this121.s0 = _this121.s1;
  						_this121.s1 = _this121.s2;
  						_this121.s2 = _this121.s3;
  						_this121.s3 = _this121.s4;
  						_this121.s4 = _this121.s5;
  						_this121.s5 = null;
  						if(_this121.s6 != null) {
  							var _this122 = _this121.s6;
  							var out51 = _this122.s0;
  							if(_this122.l != 0) {
  								_this122.s0 = _this122.s1;
  								_this122.s1 = _this122.s2;
  								_this122.s2 = _this122.s3;
  								_this122.s3 = _this122.s4;
  								_this122.s4 = _this122.s5;
  								_this122.s5 = null;
  								if(_this122.s6 != null) {
  									_this122.s5 = _this122.s6.shift();
  								}
  								_this122.l--;
  							}
  							_this121.s5 = out51;
  						}
  						_this121.l--;
  					}
  					this.lastX = out50;
  					var _this123 = this.store;
  					var out52 = _this123.s0;
  					if(_this123.l != 0) {
  						_this123.s0 = _this123.s1;
  						_this123.s1 = _this123.s2;
  						_this123.s2 = _this123.s3;
  						_this123.s3 = _this123.s4;
  						_this123.s4 = _this123.s5;
  						_this123.s5 = null;
  						if(_this123.s6 != null) {
  							var _this124 = _this123.s6;
  							var out53 = _this124.s0;
  							if(_this124.l != 0) {
  								_this124.s0 = _this124.s1;
  								_this124.s1 = _this124.s2;
  								_this124.s2 = _this124.s3;
  								_this124.s3 = _this124.s4;
  								_this124.s4 = _this124.s5;
  								_this124.s5 = null;
  								if(_this124.s6 != null) {
  									_this124.s5 = _this124.s6.shift();
  								}
  								_this124.l--;
  							}
  							_this123.s5 = out53;
  						}
  						_this123.l--;
  					}
  					this.lastY = out52;
  					this.pathContext.moveTo(this.lastX,this.lastY);
  					while(this.store.l > 1) {
  						var _this125 = this.store;
  						var out54 = _this125.s0;
  						if(_this125.l != 0) {
  							_this125.s0 = _this125.s1;
  							_this125.s1 = _this125.s2;
  							_this125.s2 = _this125.s3;
  							_this125.s3 = _this125.s4;
  							_this125.s4 = _this125.s5;
  							_this125.s5 = null;
  							if(_this125.s6 != null) {
  								var _this126 = _this125.s6;
  								var out55 = _this126.s0;
  								if(_this126.l != 0) {
  									_this126.s0 = _this126.s1;
  									_this126.s1 = _this126.s2;
  									_this126.s2 = _this126.s3;
  									_this126.s3 = _this126.s4;
  									_this126.s4 = _this126.s5;
  									_this126.s5 = null;
  									if(_this126.s6 != null) {
  										_this126.s5 = _this126.s6.shift();
  									}
  									_this126.l--;
  								}
  								_this125.s5 = out55;
  							}
  							_this125.l--;
  						}
  						this.lastX = out54;
  						var _this127 = this.store;
  						var out56 = _this127.s0;
  						if(_this127.l != 0) {
  							_this127.s0 = _this127.s1;
  							_this127.s1 = _this127.s2;
  							_this127.s2 = _this127.s3;
  							_this127.s3 = _this127.s4;
  							_this127.s4 = _this127.s5;
  							_this127.s5 = null;
  							if(_this127.s6 != null) {
  								var _this128 = _this127.s6;
  								var out57 = _this128.s0;
  								if(_this128.l != 0) {
  									_this128.s0 = _this128.s1;
  									_this128.s1 = _this128.s2;
  									_this128.s2 = _this128.s3;
  									_this128.s3 = _this128.s4;
  									_this128.s4 = _this128.s5;
  									_this128.s5 = null;
  									if(_this128.s6 != null) {
  										_this128.s5 = _this128.s6.shift();
  									}
  									_this128.l--;
  								}
  								_this127.s5 = out57;
  							}
  							_this127.l--;
  						}
  						this.lastY = out56;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 81:
  				var _this129 = this.store;
  				_this129.l = 0;
  				_this129.s0 = null;
  				_this129.s1 = null;
  				_this129.s2 = null;
  				_this129.s3 = null;
  				_this129.s4 = null;
  				_this129.s5 = null;
  				_this129.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp5 = "";
  				var exit5 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp5 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this130 = this.store;
  								var v33 = parseFloat(temp5);
  								switch(_this130.l) {
  								case 0:
  									_this130.s0 = v33;
  									break;
  								case 1:
  									_this130.s1 = v33;
  									break;
  								case 2:
  									_this130.s2 = v33;
  									break;
  								case 3:
  									_this130.s3 = v33;
  									break;
  								case 4:
  									_this130.s4 = v33;
  									break;
  								case 5:
  									_this130.s5 = v33;
  									break;
  								default:
  									if(_this130.s6 == null) {
  										_this130.s6 = new justPath_StoreF6();
  									}
  									var _this131 = _this130.s6;
  									switch(_this131.l) {
  									case 0:
  										_this131.s0 = v33;
  										break;
  									case 1:
  										_this131.s1 = v33;
  										break;
  									case 2:
  										_this131.s2 = v33;
  										break;
  									case 3:
  										_this131.s3 = v33;
  										break;
  									case 4:
  										_this131.s4 = v33;
  										break;
  									case 5:
  										_this131.s5 = v33;
  										break;
  									default:
  										if(_this131.s6 == null) {
  											_this131.s6 = new justPath_StoreF6();
  										}
  										_this131.s6.push(v33);
  									}
  									_this131.l++;
  								}
  								_this130.l++;
  							} else {
  								var _this132 = this.store;
  								var v34 = parseFloat(temp5);
  								switch(_this132.l) {
  								case 0:
  									_this132.s0 = v34;
  									break;
  								case 1:
  									_this132.s1 = v34;
  									break;
  								case 2:
  									_this132.s2 = v34;
  									break;
  								case 3:
  									_this132.s3 = v34;
  									break;
  								case 4:
  									_this132.s4 = v34;
  									break;
  								case 5:
  									_this132.s5 = v34;
  									break;
  								default:
  									if(_this132.s6 == null) {
  										_this132.s6 = new justPath_StoreF6();
  									}
  									var _this133 = _this132.s6;
  									switch(_this133.l) {
  									case 0:
  										_this133.s0 = v34;
  										break;
  									case 1:
  										_this133.s1 = v34;
  										break;
  									case 2:
  										_this133.s2 = v34;
  										break;
  									case 3:
  										_this133.s3 = v34;
  										break;
  									case 4:
  										_this133.s4 = v34;
  										break;
  									case 5:
  										_this133.s5 = v34;
  										break;
  									default:
  										if(_this133.s6 == null) {
  											_this133.s6 = new justPath_StoreF6();
  										}
  										_this133.s6.push(v34);
  									}
  									_this133.l++;
  								}
  								_this132.l++;
  							}
  							temp5 = "";
  						}
  						break;
  					case 45:
  						if(temp5 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this134 = this.store;
  								var v35 = parseFloat(temp5);
  								switch(_this134.l) {
  								case 0:
  									_this134.s0 = v35;
  									break;
  								case 1:
  									_this134.s1 = v35;
  									break;
  								case 2:
  									_this134.s2 = v35;
  									break;
  								case 3:
  									_this134.s3 = v35;
  									break;
  								case 4:
  									_this134.s4 = v35;
  									break;
  								case 5:
  									_this134.s5 = v35;
  									break;
  								default:
  									if(_this134.s6 == null) {
  										_this134.s6 = new justPath_StoreF6();
  									}
  									var _this135 = _this134.s6;
  									switch(_this135.l) {
  									case 0:
  										_this135.s0 = v35;
  										break;
  									case 1:
  										_this135.s1 = v35;
  										break;
  									case 2:
  										_this135.s2 = v35;
  										break;
  									case 3:
  										_this135.s3 = v35;
  										break;
  									case 4:
  										_this135.s4 = v35;
  										break;
  									case 5:
  										_this135.s5 = v35;
  										break;
  									default:
  										if(_this135.s6 == null) {
  											_this135.s6 = new justPath_StoreF6();
  										}
  										_this135.s6.push(v35);
  									}
  									_this135.l++;
  								}
  								_this134.l++;
  							} else {
  								var _this136 = this.store;
  								var v36 = parseFloat(temp5);
  								switch(_this136.l) {
  								case 0:
  									_this136.s0 = v36;
  									break;
  								case 1:
  									_this136.s1 = v36;
  									break;
  								case 2:
  									_this136.s2 = v36;
  									break;
  								case 3:
  									_this136.s3 = v36;
  									break;
  								case 4:
  									_this136.s4 = v36;
  									break;
  								case 5:
  									_this136.s5 = v36;
  									break;
  								default:
  									if(_this136.s6 == null) {
  										_this136.s6 = new justPath_StoreF6();
  									}
  									var _this137 = _this136.s6;
  									switch(_this137.l) {
  									case 0:
  										_this137.s0 = v36;
  										break;
  									case 1:
  										_this137.s1 = v36;
  										break;
  									case 2:
  										_this137.s2 = v36;
  										break;
  									case 3:
  										_this137.s3 = v36;
  										break;
  									case 4:
  										_this137.s4 = v36;
  										break;
  									case 5:
  										_this137.s5 = v36;
  										break;
  									default:
  										if(_this137.s6 == null) {
  											_this137.s6 = new justPath_StoreF6();
  										}
  										_this137.s6.push(v36);
  									}
  									_this137.l++;
  								}
  								_this136.l++;
  							}
  						}
  						temp5 = "-";
  						break;
  					case 46:
  						temp5 += ".";
  						break;
  					case 48:
  						temp5 += "0";
  						break;
  					case 49:
  						temp5 += "1";
  						break;
  					case 50:
  						temp5 += "2";
  						break;
  					case 51:
  						temp5 += "3";
  						break;
  					case 52:
  						temp5 += "4";
  						break;
  					case 53:
  						temp5 += "5";
  						break;
  					case 54:
  						temp5 += "6";
  						break;
  					case 55:
  						temp5 += "7";
  						break;
  					case 56:
  						temp5 += "8";
  						break;
  					case 57:
  						temp5 += "9";
  						break;
  					default:
  						if(temp5 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this138 = this.store;
  								var v37 = parseFloat(temp5);
  								switch(_this138.l) {
  								case 0:
  									_this138.s0 = v37;
  									break;
  								case 1:
  									_this138.s1 = v37;
  									break;
  								case 2:
  									_this138.s2 = v37;
  									break;
  								case 3:
  									_this138.s3 = v37;
  									break;
  								case 4:
  									_this138.s4 = v37;
  									break;
  								case 5:
  									_this138.s5 = v37;
  									break;
  								default:
  									if(_this138.s6 == null) {
  										_this138.s6 = new justPath_StoreF6();
  									}
  									var _this139 = _this138.s6;
  									switch(_this139.l) {
  									case 0:
  										_this139.s0 = v37;
  										break;
  									case 1:
  										_this139.s1 = v37;
  										break;
  									case 2:
  										_this139.s2 = v37;
  										break;
  									case 3:
  										_this139.s3 = v37;
  										break;
  									case 4:
  										_this139.s4 = v37;
  										break;
  									case 5:
  										_this139.s5 = v37;
  										break;
  									default:
  										if(_this139.s6 == null) {
  											_this139.s6 = new justPath_StoreF6();
  										}
  										_this139.s6.push(v37);
  									}
  									_this139.l++;
  								}
  								_this138.l++;
  							} else {
  								var _this140 = this.store;
  								var v38 = parseFloat(temp5);
  								switch(_this140.l) {
  								case 0:
  									_this140.s0 = v38;
  									break;
  								case 1:
  									_this140.s1 = v38;
  									break;
  								case 2:
  									_this140.s2 = v38;
  									break;
  								case 3:
  									_this140.s3 = v38;
  									break;
  								case 4:
  									_this140.s4 = v38;
  									break;
  								case 5:
  									_this140.s5 = v38;
  									break;
  								default:
  									if(_this140.s6 == null) {
  										_this140.s6 = new justPath_StoreF6();
  									}
  									var _this141 = _this140.s6;
  									switch(_this141.l) {
  									case 0:
  										_this141.s0 = v38;
  										break;
  									case 1:
  										_this141.s1 = v38;
  										break;
  									case 2:
  										_this141.s2 = v38;
  										break;
  									case 3:
  										_this141.s3 = v38;
  										break;
  									case 4:
  										_this141.s4 = v38;
  										break;
  									case 5:
  										_this141.s5 = v38;
  										break;
  									default:
  										if(_this141.s6 == null) {
  											_this141.s6 = new justPath_StoreF6();
  										}
  										_this141.s6.push(v38);
  									}
  									_this141.l++;
  								}
  								_this140.l++;
  							}
  							temp5 = "";
  						}
  						this.pos--;
  						exit5 = true;
  					}
  					if(exit5) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 4) {
  					this.controlX = this.store.s0;
  					this.controlY = this.store.s1;
  					this.lastX = this.store.s2;
  					this.lastY = this.store.s3;
  					this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  				} else if(this.store.l > 4) {
  					while(this.store.l > 3) {
  						var _this142 = this.store;
  						var out58 = _this142.s0;
  						if(_this142.l != 0) {
  							_this142.s0 = _this142.s1;
  							_this142.s1 = _this142.s2;
  							_this142.s2 = _this142.s3;
  							_this142.s3 = _this142.s4;
  							_this142.s4 = _this142.s5;
  							_this142.s5 = null;
  							if(_this142.s6 != null) {
  								var _this143 = _this142.s6;
  								var out59 = _this143.s0;
  								if(_this143.l != 0) {
  									_this143.s0 = _this143.s1;
  									_this143.s1 = _this143.s2;
  									_this143.s2 = _this143.s3;
  									_this143.s3 = _this143.s4;
  									_this143.s4 = _this143.s5;
  									_this143.s5 = null;
  									if(_this143.s6 != null) {
  										_this143.s5 = _this143.s6.shift();
  									}
  									_this143.l--;
  								}
  								_this142.s5 = out59;
  							}
  							_this142.l--;
  						}
  						this.controlX = out58;
  						var _this144 = this.store;
  						var out60 = _this144.s0;
  						if(_this144.l != 0) {
  							_this144.s0 = _this144.s1;
  							_this144.s1 = _this144.s2;
  							_this144.s2 = _this144.s3;
  							_this144.s3 = _this144.s4;
  							_this144.s4 = _this144.s5;
  							_this144.s5 = null;
  							if(_this144.s6 != null) {
  								var _this145 = _this144.s6;
  								var out61 = _this145.s0;
  								if(_this145.l != 0) {
  									_this145.s0 = _this145.s1;
  									_this145.s1 = _this145.s2;
  									_this145.s2 = _this145.s3;
  									_this145.s3 = _this145.s4;
  									_this145.s4 = _this145.s5;
  									_this145.s5 = null;
  									if(_this145.s6 != null) {
  										_this145.s5 = _this145.s6.shift();
  									}
  									_this145.l--;
  								}
  								_this144.s5 = out61;
  							}
  							_this144.l--;
  						}
  						this.controlY = out60;
  						var _this146 = this.store;
  						var out62 = _this146.s0;
  						if(_this146.l != 0) {
  							_this146.s0 = _this146.s1;
  							_this146.s1 = _this146.s2;
  							_this146.s2 = _this146.s3;
  							_this146.s3 = _this146.s4;
  							_this146.s4 = _this146.s5;
  							_this146.s5 = null;
  							if(_this146.s6 != null) {
  								var _this147 = _this146.s6;
  								var out63 = _this147.s0;
  								if(_this147.l != 0) {
  									_this147.s0 = _this147.s1;
  									_this147.s1 = _this147.s2;
  									_this147.s2 = _this147.s3;
  									_this147.s3 = _this147.s4;
  									_this147.s4 = _this147.s5;
  									_this147.s5 = null;
  									if(_this147.s6 != null) {
  										_this147.s5 = _this147.s6.shift();
  									}
  									_this147.l--;
  								}
  								_this146.s5 = out63;
  							}
  							_this146.l--;
  						}
  						this.lastX = out62;
  						var _this148 = this.store;
  						var out64 = _this148.s0;
  						if(_this148.l != 0) {
  							_this148.s0 = _this148.s1;
  							_this148.s1 = _this148.s2;
  							_this148.s2 = _this148.s3;
  							_this148.s3 = _this148.s4;
  							_this148.s4 = _this148.s5;
  							_this148.s5 = null;
  							if(_this148.s6 != null) {
  								var _this149 = _this148.s6;
  								var out65 = _this149.s0;
  								if(_this149.l != 0) {
  									_this149.s0 = _this149.s1;
  									_this149.s1 = _this149.s2;
  									_this149.s2 = _this149.s3;
  									_this149.s3 = _this149.s4;
  									_this149.s4 = _this149.s5;
  									_this149.s5 = null;
  									if(_this149.s6 != null) {
  										_this149.s5 = _this149.s6.shift();
  									}
  									_this149.l--;
  								}
  								_this148.s5 = out65;
  							}
  							_this148.l--;
  						}
  						this.lastY = out64;
  						this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 83:
  				var _this150 = this.store;
  				_this150.l = 0;
  				_this150.s0 = null;
  				_this150.s1 = null;
  				_this150.s2 = null;
  				_this150.s3 = null;
  				_this150.s4 = null;
  				_this150.s5 = null;
  				_this150.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp6 = "";
  				var exit6 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp6 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this151 = this.store;
  								var v39 = parseFloat(temp6);
  								switch(_this151.l) {
  								case 0:
  									_this151.s0 = v39;
  									break;
  								case 1:
  									_this151.s1 = v39;
  									break;
  								case 2:
  									_this151.s2 = v39;
  									break;
  								case 3:
  									_this151.s3 = v39;
  									break;
  								case 4:
  									_this151.s4 = v39;
  									break;
  								case 5:
  									_this151.s5 = v39;
  									break;
  								default:
  									if(_this151.s6 == null) {
  										_this151.s6 = new justPath_StoreF6();
  									}
  									var _this152 = _this151.s6;
  									switch(_this152.l) {
  									case 0:
  										_this152.s0 = v39;
  										break;
  									case 1:
  										_this152.s1 = v39;
  										break;
  									case 2:
  										_this152.s2 = v39;
  										break;
  									case 3:
  										_this152.s3 = v39;
  										break;
  									case 4:
  										_this152.s4 = v39;
  										break;
  									case 5:
  										_this152.s5 = v39;
  										break;
  									default:
  										if(_this152.s6 == null) {
  											_this152.s6 = new justPath_StoreF6();
  										}
  										_this152.s6.push(v39);
  									}
  									_this152.l++;
  								}
  								_this151.l++;
  							} else {
  								var _this153 = this.store;
  								var v40 = parseFloat(temp6);
  								switch(_this153.l) {
  								case 0:
  									_this153.s0 = v40;
  									break;
  								case 1:
  									_this153.s1 = v40;
  									break;
  								case 2:
  									_this153.s2 = v40;
  									break;
  								case 3:
  									_this153.s3 = v40;
  									break;
  								case 4:
  									_this153.s4 = v40;
  									break;
  								case 5:
  									_this153.s5 = v40;
  									break;
  								default:
  									if(_this153.s6 == null) {
  										_this153.s6 = new justPath_StoreF6();
  									}
  									var _this154 = _this153.s6;
  									switch(_this154.l) {
  									case 0:
  										_this154.s0 = v40;
  										break;
  									case 1:
  										_this154.s1 = v40;
  										break;
  									case 2:
  										_this154.s2 = v40;
  										break;
  									case 3:
  										_this154.s3 = v40;
  										break;
  									case 4:
  										_this154.s4 = v40;
  										break;
  									case 5:
  										_this154.s5 = v40;
  										break;
  									default:
  										if(_this154.s6 == null) {
  											_this154.s6 = new justPath_StoreF6();
  										}
  										_this154.s6.push(v40);
  									}
  									_this154.l++;
  								}
  								_this153.l++;
  							}
  							temp6 = "";
  						}
  						break;
  					case 45:
  						if(temp6 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this155 = this.store;
  								var v41 = parseFloat(temp6);
  								switch(_this155.l) {
  								case 0:
  									_this155.s0 = v41;
  									break;
  								case 1:
  									_this155.s1 = v41;
  									break;
  								case 2:
  									_this155.s2 = v41;
  									break;
  								case 3:
  									_this155.s3 = v41;
  									break;
  								case 4:
  									_this155.s4 = v41;
  									break;
  								case 5:
  									_this155.s5 = v41;
  									break;
  								default:
  									if(_this155.s6 == null) {
  										_this155.s6 = new justPath_StoreF6();
  									}
  									var _this156 = _this155.s6;
  									switch(_this156.l) {
  									case 0:
  										_this156.s0 = v41;
  										break;
  									case 1:
  										_this156.s1 = v41;
  										break;
  									case 2:
  										_this156.s2 = v41;
  										break;
  									case 3:
  										_this156.s3 = v41;
  										break;
  									case 4:
  										_this156.s4 = v41;
  										break;
  									case 5:
  										_this156.s5 = v41;
  										break;
  									default:
  										if(_this156.s6 == null) {
  											_this156.s6 = new justPath_StoreF6();
  										}
  										_this156.s6.push(v41);
  									}
  									_this156.l++;
  								}
  								_this155.l++;
  							} else {
  								var _this157 = this.store;
  								var v42 = parseFloat(temp6);
  								switch(_this157.l) {
  								case 0:
  									_this157.s0 = v42;
  									break;
  								case 1:
  									_this157.s1 = v42;
  									break;
  								case 2:
  									_this157.s2 = v42;
  									break;
  								case 3:
  									_this157.s3 = v42;
  									break;
  								case 4:
  									_this157.s4 = v42;
  									break;
  								case 5:
  									_this157.s5 = v42;
  									break;
  								default:
  									if(_this157.s6 == null) {
  										_this157.s6 = new justPath_StoreF6();
  									}
  									var _this158 = _this157.s6;
  									switch(_this158.l) {
  									case 0:
  										_this158.s0 = v42;
  										break;
  									case 1:
  										_this158.s1 = v42;
  										break;
  									case 2:
  										_this158.s2 = v42;
  										break;
  									case 3:
  										_this158.s3 = v42;
  										break;
  									case 4:
  										_this158.s4 = v42;
  										break;
  									case 5:
  										_this158.s5 = v42;
  										break;
  									default:
  										if(_this158.s6 == null) {
  											_this158.s6 = new justPath_StoreF6();
  										}
  										_this158.s6.push(v42);
  									}
  									_this158.l++;
  								}
  								_this157.l++;
  							}
  						}
  						temp6 = "-";
  						break;
  					case 46:
  						temp6 += ".";
  						break;
  					case 48:
  						temp6 += "0";
  						break;
  					case 49:
  						temp6 += "1";
  						break;
  					case 50:
  						temp6 += "2";
  						break;
  					case 51:
  						temp6 += "3";
  						break;
  					case 52:
  						temp6 += "4";
  						break;
  					case 53:
  						temp6 += "5";
  						break;
  					case 54:
  						temp6 += "6";
  						break;
  					case 55:
  						temp6 += "7";
  						break;
  					case 56:
  						temp6 += "8";
  						break;
  					case 57:
  						temp6 += "9";
  						break;
  					default:
  						if(temp6 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this159 = this.store;
  								var v43 = parseFloat(temp6);
  								switch(_this159.l) {
  								case 0:
  									_this159.s0 = v43;
  									break;
  								case 1:
  									_this159.s1 = v43;
  									break;
  								case 2:
  									_this159.s2 = v43;
  									break;
  								case 3:
  									_this159.s3 = v43;
  									break;
  								case 4:
  									_this159.s4 = v43;
  									break;
  								case 5:
  									_this159.s5 = v43;
  									break;
  								default:
  									if(_this159.s6 == null) {
  										_this159.s6 = new justPath_StoreF6();
  									}
  									var _this160 = _this159.s6;
  									switch(_this160.l) {
  									case 0:
  										_this160.s0 = v43;
  										break;
  									case 1:
  										_this160.s1 = v43;
  										break;
  									case 2:
  										_this160.s2 = v43;
  										break;
  									case 3:
  										_this160.s3 = v43;
  										break;
  									case 4:
  										_this160.s4 = v43;
  										break;
  									case 5:
  										_this160.s5 = v43;
  										break;
  									default:
  										if(_this160.s6 == null) {
  											_this160.s6 = new justPath_StoreF6();
  										}
  										_this160.s6.push(v43);
  									}
  									_this160.l++;
  								}
  								_this159.l++;
  							} else {
  								var _this161 = this.store;
  								var v44 = parseFloat(temp6);
  								switch(_this161.l) {
  								case 0:
  									_this161.s0 = v44;
  									break;
  								case 1:
  									_this161.s1 = v44;
  									break;
  								case 2:
  									_this161.s2 = v44;
  									break;
  								case 3:
  									_this161.s3 = v44;
  									break;
  								case 4:
  									_this161.s4 = v44;
  									break;
  								case 5:
  									_this161.s5 = v44;
  									break;
  								default:
  									if(_this161.s6 == null) {
  										_this161.s6 = new justPath_StoreF6();
  									}
  									var _this162 = _this161.s6;
  									switch(_this162.l) {
  									case 0:
  										_this162.s0 = v44;
  										break;
  									case 1:
  										_this162.s1 = v44;
  										break;
  									case 2:
  										_this162.s2 = v44;
  										break;
  									case 3:
  										_this162.s3 = v44;
  										break;
  									case 4:
  										_this162.s4 = v44;
  										break;
  									case 5:
  										_this162.s5 = v44;
  										break;
  									default:
  										if(_this162.s6 == null) {
  											_this162.s6 = new justPath_StoreF6();
  										}
  										_this162.s6.push(v44);
  									}
  									_this162.l++;
  								}
  								_this161.l++;
  							}
  							temp6 = "";
  						}
  						this.pos--;
  						exit6 = true;
  					}
  					if(exit6) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 4) {
  					var firstX1 = this.store.s0;
  					var firstY1 = this.store.s1;
  					this.controlX = 2 * this.lastX - this.controlX;
  					this.controlY = 2 * this.lastY - this.controlY;
  					var endX = this.store.s2;
  					var endY = this.store.s3;
  					this.pathContext.curveTo(this.controlX,this.controlY,firstX1,firstY1,endX,endY);
  					this.controlX = this.store.s0;
  					this.controlY = this.store.s1;
  					this.lastX = endX;
  					this.lastY = endY;
  				} else if(this.store.l > 4) {
  					while(this.store.l > 3) {
  						var _this163 = this.store;
  						var out66 = _this163.s0;
  						if(_this163.l != 0) {
  							_this163.s0 = _this163.s1;
  							_this163.s1 = _this163.s2;
  							_this163.s2 = _this163.s3;
  							_this163.s3 = _this163.s4;
  							_this163.s4 = _this163.s5;
  							_this163.s5 = null;
  							if(_this163.s6 != null) {
  								var _this164 = _this163.s6;
  								var out67 = _this164.s0;
  								if(_this164.l != 0) {
  									_this164.s0 = _this164.s1;
  									_this164.s1 = _this164.s2;
  									_this164.s2 = _this164.s3;
  									_this164.s3 = _this164.s4;
  									_this164.s4 = _this164.s5;
  									_this164.s5 = null;
  									if(_this164.s6 != null) {
  										_this164.s5 = _this164.s6.shift();
  									}
  									_this164.l--;
  								}
  								_this163.s5 = out67;
  							}
  							_this163.l--;
  						}
  						var firstX2 = out66;
  						var _this165 = this.store;
  						var out68 = _this165.s0;
  						if(_this165.l != 0) {
  							_this165.s0 = _this165.s1;
  							_this165.s1 = _this165.s2;
  							_this165.s2 = _this165.s3;
  							_this165.s3 = _this165.s4;
  							_this165.s4 = _this165.s5;
  							_this165.s5 = null;
  							if(_this165.s6 != null) {
  								var _this166 = _this165.s6;
  								var out69 = _this166.s0;
  								if(_this166.l != 0) {
  									_this166.s0 = _this166.s1;
  									_this166.s1 = _this166.s2;
  									_this166.s2 = _this166.s3;
  									_this166.s3 = _this166.s4;
  									_this166.s4 = _this166.s5;
  									_this166.s5 = null;
  									if(_this166.s6 != null) {
  										_this166.s5 = _this166.s6.shift();
  									}
  									_this166.l--;
  								}
  								_this165.s5 = out69;
  							}
  							_this165.l--;
  						}
  						var firstY2 = out68;
  						this.controlX = 2 * this.lastX - this.controlX;
  						this.controlY = 2 * this.lastY - this.controlY;
  						var _this167 = this.store;
  						var out70 = _this167.s0;
  						if(_this167.l != 0) {
  							_this167.s0 = _this167.s1;
  							_this167.s1 = _this167.s2;
  							_this167.s2 = _this167.s3;
  							_this167.s3 = _this167.s4;
  							_this167.s4 = _this167.s5;
  							_this167.s5 = null;
  							if(_this167.s6 != null) {
  								var _this168 = _this167.s6;
  								var out71 = _this168.s0;
  								if(_this168.l != 0) {
  									_this168.s0 = _this168.s1;
  									_this168.s1 = _this168.s2;
  									_this168.s2 = _this168.s3;
  									_this168.s3 = _this168.s4;
  									_this168.s4 = _this168.s5;
  									_this168.s5 = null;
  									if(_this168.s6 != null) {
  										_this168.s5 = _this168.s6.shift();
  									}
  									_this168.l--;
  								}
  								_this167.s5 = out71;
  							}
  							_this167.l--;
  						}
  						this.lastX = out70;
  						var _this169 = this.store;
  						var out72 = _this169.s0;
  						if(_this169.l != 0) {
  							_this169.s0 = _this169.s1;
  							_this169.s1 = _this169.s2;
  							_this169.s2 = _this169.s3;
  							_this169.s3 = _this169.s4;
  							_this169.s4 = _this169.s5;
  							_this169.s5 = null;
  							if(_this169.s6 != null) {
  								var _this170 = _this169.s6;
  								var out73 = _this170.s0;
  								if(_this170.l != 0) {
  									_this170.s0 = _this170.s1;
  									_this170.s1 = _this170.s2;
  									_this170.s2 = _this170.s3;
  									_this170.s3 = _this170.s4;
  									_this170.s4 = _this170.s5;
  									_this170.s5 = null;
  									if(_this170.s6 != null) {
  										_this170.s5 = _this170.s6.shift();
  									}
  									_this170.l--;
  								}
  								_this169.s5 = out73;
  							}
  							_this169.l--;
  						}
  						this.lastY = out72;
  						this.pathContext.curveTo(this.controlX,this.controlY,firstX2,firstY2,this.lastX,this.lastY);
  						this.controlX = firstX2;
  						this.controlY = firstY2;
  					}
  				}
  				break;
  			case 84:
  				var _this171 = this.store;
  				_this171.l = 0;
  				_this171.s0 = null;
  				_this171.s1 = null;
  				_this171.s2 = null;
  				_this171.s3 = null;
  				_this171.s4 = null;
  				_this171.s5 = null;
  				_this171.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp7 = "";
  				var exit7 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp7 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this172 = this.store;
  								var v45 = parseFloat(temp7);
  								switch(_this172.l) {
  								case 0:
  									_this172.s0 = v45;
  									break;
  								case 1:
  									_this172.s1 = v45;
  									break;
  								case 2:
  									_this172.s2 = v45;
  									break;
  								case 3:
  									_this172.s3 = v45;
  									break;
  								case 4:
  									_this172.s4 = v45;
  									break;
  								case 5:
  									_this172.s5 = v45;
  									break;
  								default:
  									if(_this172.s6 == null) {
  										_this172.s6 = new justPath_StoreF6();
  									}
  									var _this173 = _this172.s6;
  									switch(_this173.l) {
  									case 0:
  										_this173.s0 = v45;
  										break;
  									case 1:
  										_this173.s1 = v45;
  										break;
  									case 2:
  										_this173.s2 = v45;
  										break;
  									case 3:
  										_this173.s3 = v45;
  										break;
  									case 4:
  										_this173.s4 = v45;
  										break;
  									case 5:
  										_this173.s5 = v45;
  										break;
  									default:
  										if(_this173.s6 == null) {
  											_this173.s6 = new justPath_StoreF6();
  										}
  										_this173.s6.push(v45);
  									}
  									_this173.l++;
  								}
  								_this172.l++;
  							} else {
  								var _this174 = this.store;
  								var v46 = parseFloat(temp7);
  								switch(_this174.l) {
  								case 0:
  									_this174.s0 = v46;
  									break;
  								case 1:
  									_this174.s1 = v46;
  									break;
  								case 2:
  									_this174.s2 = v46;
  									break;
  								case 3:
  									_this174.s3 = v46;
  									break;
  								case 4:
  									_this174.s4 = v46;
  									break;
  								case 5:
  									_this174.s5 = v46;
  									break;
  								default:
  									if(_this174.s6 == null) {
  										_this174.s6 = new justPath_StoreF6();
  									}
  									var _this175 = _this174.s6;
  									switch(_this175.l) {
  									case 0:
  										_this175.s0 = v46;
  										break;
  									case 1:
  										_this175.s1 = v46;
  										break;
  									case 2:
  										_this175.s2 = v46;
  										break;
  									case 3:
  										_this175.s3 = v46;
  										break;
  									case 4:
  										_this175.s4 = v46;
  										break;
  									case 5:
  										_this175.s5 = v46;
  										break;
  									default:
  										if(_this175.s6 == null) {
  											_this175.s6 = new justPath_StoreF6();
  										}
  										_this175.s6.push(v46);
  									}
  									_this175.l++;
  								}
  								_this174.l++;
  							}
  							temp7 = "";
  						}
  						break;
  					case 45:
  						if(temp7 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this176 = this.store;
  								var v47 = parseFloat(temp7);
  								switch(_this176.l) {
  								case 0:
  									_this176.s0 = v47;
  									break;
  								case 1:
  									_this176.s1 = v47;
  									break;
  								case 2:
  									_this176.s2 = v47;
  									break;
  								case 3:
  									_this176.s3 = v47;
  									break;
  								case 4:
  									_this176.s4 = v47;
  									break;
  								case 5:
  									_this176.s5 = v47;
  									break;
  								default:
  									if(_this176.s6 == null) {
  										_this176.s6 = new justPath_StoreF6();
  									}
  									var _this177 = _this176.s6;
  									switch(_this177.l) {
  									case 0:
  										_this177.s0 = v47;
  										break;
  									case 1:
  										_this177.s1 = v47;
  										break;
  									case 2:
  										_this177.s2 = v47;
  										break;
  									case 3:
  										_this177.s3 = v47;
  										break;
  									case 4:
  										_this177.s4 = v47;
  										break;
  									case 5:
  										_this177.s5 = v47;
  										break;
  									default:
  										if(_this177.s6 == null) {
  											_this177.s6 = new justPath_StoreF6();
  										}
  										_this177.s6.push(v47);
  									}
  									_this177.l++;
  								}
  								_this176.l++;
  							} else {
  								var _this178 = this.store;
  								var v48 = parseFloat(temp7);
  								switch(_this178.l) {
  								case 0:
  									_this178.s0 = v48;
  									break;
  								case 1:
  									_this178.s1 = v48;
  									break;
  								case 2:
  									_this178.s2 = v48;
  									break;
  								case 3:
  									_this178.s3 = v48;
  									break;
  								case 4:
  									_this178.s4 = v48;
  									break;
  								case 5:
  									_this178.s5 = v48;
  									break;
  								default:
  									if(_this178.s6 == null) {
  										_this178.s6 = new justPath_StoreF6();
  									}
  									var _this179 = _this178.s6;
  									switch(_this179.l) {
  									case 0:
  										_this179.s0 = v48;
  										break;
  									case 1:
  										_this179.s1 = v48;
  										break;
  									case 2:
  										_this179.s2 = v48;
  										break;
  									case 3:
  										_this179.s3 = v48;
  										break;
  									case 4:
  										_this179.s4 = v48;
  										break;
  									case 5:
  										_this179.s5 = v48;
  										break;
  									default:
  										if(_this179.s6 == null) {
  											_this179.s6 = new justPath_StoreF6();
  										}
  										_this179.s6.push(v48);
  									}
  									_this179.l++;
  								}
  								_this178.l++;
  							}
  						}
  						temp7 = "-";
  						break;
  					case 46:
  						temp7 += ".";
  						break;
  					case 48:
  						temp7 += "0";
  						break;
  					case 49:
  						temp7 += "1";
  						break;
  					case 50:
  						temp7 += "2";
  						break;
  					case 51:
  						temp7 += "3";
  						break;
  					case 52:
  						temp7 += "4";
  						break;
  					case 53:
  						temp7 += "5";
  						break;
  					case 54:
  						temp7 += "6";
  						break;
  					case 55:
  						temp7 += "7";
  						break;
  					case 56:
  						temp7 += "8";
  						break;
  					case 57:
  						temp7 += "9";
  						break;
  					default:
  						if(temp7 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this180 = this.store;
  								var v49 = parseFloat(temp7);
  								switch(_this180.l) {
  								case 0:
  									_this180.s0 = v49;
  									break;
  								case 1:
  									_this180.s1 = v49;
  									break;
  								case 2:
  									_this180.s2 = v49;
  									break;
  								case 3:
  									_this180.s3 = v49;
  									break;
  								case 4:
  									_this180.s4 = v49;
  									break;
  								case 5:
  									_this180.s5 = v49;
  									break;
  								default:
  									if(_this180.s6 == null) {
  										_this180.s6 = new justPath_StoreF6();
  									}
  									var _this181 = _this180.s6;
  									switch(_this181.l) {
  									case 0:
  										_this181.s0 = v49;
  										break;
  									case 1:
  										_this181.s1 = v49;
  										break;
  									case 2:
  										_this181.s2 = v49;
  										break;
  									case 3:
  										_this181.s3 = v49;
  										break;
  									case 4:
  										_this181.s4 = v49;
  										break;
  									case 5:
  										_this181.s5 = v49;
  										break;
  									default:
  										if(_this181.s6 == null) {
  											_this181.s6 = new justPath_StoreF6();
  										}
  										_this181.s6.push(v49);
  									}
  									_this181.l++;
  								}
  								_this180.l++;
  							} else {
  								var _this182 = this.store;
  								var v50 = parseFloat(temp7);
  								switch(_this182.l) {
  								case 0:
  									_this182.s0 = v50;
  									break;
  								case 1:
  									_this182.s1 = v50;
  									break;
  								case 2:
  									_this182.s2 = v50;
  									break;
  								case 3:
  									_this182.s3 = v50;
  									break;
  								case 4:
  									_this182.s4 = v50;
  									break;
  								case 5:
  									_this182.s5 = v50;
  									break;
  								default:
  									if(_this182.s6 == null) {
  										_this182.s6 = new justPath_StoreF6();
  									}
  									var _this183 = _this182.s6;
  									switch(_this183.l) {
  									case 0:
  										_this183.s0 = v50;
  										break;
  									case 1:
  										_this183.s1 = v50;
  										break;
  									case 2:
  										_this183.s2 = v50;
  										break;
  									case 3:
  										_this183.s3 = v50;
  										break;
  									case 4:
  										_this183.s4 = v50;
  										break;
  									case 5:
  										_this183.s5 = v50;
  										break;
  									default:
  										if(_this183.s6 == null) {
  											_this183.s6 = new justPath_StoreF6();
  										}
  										_this183.s6.push(v50);
  									}
  									_this183.l++;
  								}
  								_this182.l++;
  							}
  							temp7 = "";
  						}
  						this.pos--;
  						exit7 = true;
  					}
  					if(exit7) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 2) {
  					this.controlX = 2 * this.lastX - this.controlX;
  					this.controlY = 2 * this.lastY - this.controlY;
  					this.lastX = this.store.s0;
  					this.lastY = this.store.s1;
  					this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  				} else if(this.store.l > 2) {
  					while(this.store.l > 1) {
  						this.controlX = 2 * this.lastX - this.controlX;
  						this.controlY = 2 * this.lastY - this.controlY;
  						var _this184 = this.store;
  						var out74 = _this184.s0;
  						if(_this184.l != 0) {
  							_this184.s0 = _this184.s1;
  							_this184.s1 = _this184.s2;
  							_this184.s2 = _this184.s3;
  							_this184.s3 = _this184.s4;
  							_this184.s4 = _this184.s5;
  							_this184.s5 = null;
  							if(_this184.s6 != null) {
  								var _this185 = _this184.s6;
  								var out75 = _this185.s0;
  								if(_this185.l != 0) {
  									_this185.s0 = _this185.s1;
  									_this185.s1 = _this185.s2;
  									_this185.s2 = _this185.s3;
  									_this185.s3 = _this185.s4;
  									_this185.s4 = _this185.s5;
  									_this185.s5 = null;
  									if(_this185.s6 != null) {
  										_this185.s5 = _this185.s6.shift();
  									}
  									_this185.l--;
  								}
  								_this184.s5 = out75;
  							}
  							_this184.l--;
  						}
  						this.lastX = out74;
  						var _this186 = this.store;
  						var out76 = _this186.s0;
  						if(_this186.l != 0) {
  							_this186.s0 = _this186.s1;
  							_this186.s1 = _this186.s2;
  							_this186.s2 = _this186.s3;
  							_this186.s3 = _this186.s4;
  							_this186.s4 = _this186.s5;
  							_this186.s5 = null;
  							if(_this186.s6 != null) {
  								var _this187 = _this186.s6;
  								var out77 = _this187.s0;
  								if(_this187.l != 0) {
  									_this187.s0 = _this187.s1;
  									_this187.s1 = _this187.s2;
  									_this187.s2 = _this187.s3;
  									_this187.s3 = _this187.s4;
  									_this187.s4 = _this187.s5;
  									_this187.s5 = null;
  									if(_this187.s6 != null) {
  										_this187.s5 = _this187.s6.shift();
  									}
  									_this187.l--;
  								}
  								_this186.s5 = out77;
  							}
  							_this186.l--;
  						}
  						this.lastY = out76;
  						this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 86:
  				var process1 = false;
  				if(process1 == null) {
  					process1 = true;
  				}
  				var _this188 = this.store;
  				_this188.l = 0;
  				_this188.s0 = null;
  				_this188.s1 = null;
  				_this188.s2 = null;
  				_this188.s3 = null;
  				_this188.s4 = null;
  				_this188.s5 = null;
  				_this188.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp8 = "";
  				var exit8 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp8 != "") {
  							if(process1) {
  								if((this.store.l & 1) == 0) {
  									var _this189 = this.store;
  									var v51 = parseFloat(temp8);
  									switch(_this189.l) {
  									case 0:
  										_this189.s0 = v51;
  										break;
  									case 1:
  										_this189.s1 = v51;
  										break;
  									case 2:
  										_this189.s2 = v51;
  										break;
  									case 3:
  										_this189.s3 = v51;
  										break;
  									case 4:
  										_this189.s4 = v51;
  										break;
  									case 5:
  										_this189.s5 = v51;
  										break;
  									default:
  										if(_this189.s6 == null) {
  											_this189.s6 = new justPath_StoreF6();
  										}
  										var _this190 = _this189.s6;
  										switch(_this190.l) {
  										case 0:
  											_this190.s0 = v51;
  											break;
  										case 1:
  											_this190.s1 = v51;
  											break;
  										case 2:
  											_this190.s2 = v51;
  											break;
  										case 3:
  											_this190.s3 = v51;
  											break;
  										case 4:
  											_this190.s4 = v51;
  											break;
  										case 5:
  											_this190.s5 = v51;
  											break;
  										default:
  											if(_this190.s6 == null) {
  												_this190.s6 = new justPath_StoreF6();
  											}
  											_this190.s6.push(v51);
  										}
  										_this190.l++;
  									}
  									_this189.l++;
  								} else {
  									var _this191 = this.store;
  									var v52 = parseFloat(temp8);
  									switch(_this191.l) {
  									case 0:
  										_this191.s0 = v52;
  										break;
  									case 1:
  										_this191.s1 = v52;
  										break;
  									case 2:
  										_this191.s2 = v52;
  										break;
  									case 3:
  										_this191.s3 = v52;
  										break;
  									case 4:
  										_this191.s4 = v52;
  										break;
  									case 5:
  										_this191.s5 = v52;
  										break;
  									default:
  										if(_this191.s6 == null) {
  											_this191.s6 = new justPath_StoreF6();
  										}
  										var _this192 = _this191.s6;
  										switch(_this192.l) {
  										case 0:
  											_this192.s0 = v52;
  											break;
  										case 1:
  											_this192.s1 = v52;
  											break;
  										case 2:
  											_this192.s2 = v52;
  											break;
  										case 3:
  											_this192.s3 = v52;
  											break;
  										case 4:
  											_this192.s4 = v52;
  											break;
  										case 5:
  											_this192.s5 = v52;
  											break;
  										default:
  											if(_this192.s6 == null) {
  												_this192.s6 = new justPath_StoreF6();
  											}
  											_this192.s6.push(v52);
  										}
  										_this192.l++;
  									}
  									_this191.l++;
  								}
  							} else {
  								var _this193 = this.store;
  								var v53 = parseFloat(temp8);
  								switch(_this193.l) {
  								case 0:
  									_this193.s0 = v53;
  									break;
  								case 1:
  									_this193.s1 = v53;
  									break;
  								case 2:
  									_this193.s2 = v53;
  									break;
  								case 3:
  									_this193.s3 = v53;
  									break;
  								case 4:
  									_this193.s4 = v53;
  									break;
  								case 5:
  									_this193.s5 = v53;
  									break;
  								default:
  									if(_this193.s6 == null) {
  										_this193.s6 = new justPath_StoreF6();
  									}
  									var _this194 = _this193.s6;
  									switch(_this194.l) {
  									case 0:
  										_this194.s0 = v53;
  										break;
  									case 1:
  										_this194.s1 = v53;
  										break;
  									case 2:
  										_this194.s2 = v53;
  										break;
  									case 3:
  										_this194.s3 = v53;
  										break;
  									case 4:
  										_this194.s4 = v53;
  										break;
  									case 5:
  										_this194.s5 = v53;
  										break;
  									default:
  										if(_this194.s6 == null) {
  											_this194.s6 = new justPath_StoreF6();
  										}
  										_this194.s6.push(v53);
  									}
  									_this194.l++;
  								}
  								_this193.l++;
  							}
  							temp8 = "";
  						}
  						break;
  					case 45:
  						if(temp8 != "") {
  							if(process1) {
  								if((this.store.l & 1) == 0) {
  									var _this195 = this.store;
  									var v54 = parseFloat(temp8);
  									switch(_this195.l) {
  									case 0:
  										_this195.s0 = v54;
  										break;
  									case 1:
  										_this195.s1 = v54;
  										break;
  									case 2:
  										_this195.s2 = v54;
  										break;
  									case 3:
  										_this195.s3 = v54;
  										break;
  									case 4:
  										_this195.s4 = v54;
  										break;
  									case 5:
  										_this195.s5 = v54;
  										break;
  									default:
  										if(_this195.s6 == null) {
  											_this195.s6 = new justPath_StoreF6();
  										}
  										var _this196 = _this195.s6;
  										switch(_this196.l) {
  										case 0:
  											_this196.s0 = v54;
  											break;
  										case 1:
  											_this196.s1 = v54;
  											break;
  										case 2:
  											_this196.s2 = v54;
  											break;
  										case 3:
  											_this196.s3 = v54;
  											break;
  										case 4:
  											_this196.s4 = v54;
  											break;
  										case 5:
  											_this196.s5 = v54;
  											break;
  										default:
  											if(_this196.s6 == null) {
  												_this196.s6 = new justPath_StoreF6();
  											}
  											_this196.s6.push(v54);
  										}
  										_this196.l++;
  									}
  									_this195.l++;
  								} else {
  									var _this197 = this.store;
  									var v55 = parseFloat(temp8);
  									switch(_this197.l) {
  									case 0:
  										_this197.s0 = v55;
  										break;
  									case 1:
  										_this197.s1 = v55;
  										break;
  									case 2:
  										_this197.s2 = v55;
  										break;
  									case 3:
  										_this197.s3 = v55;
  										break;
  									case 4:
  										_this197.s4 = v55;
  										break;
  									case 5:
  										_this197.s5 = v55;
  										break;
  									default:
  										if(_this197.s6 == null) {
  											_this197.s6 = new justPath_StoreF6();
  										}
  										var _this198 = _this197.s6;
  										switch(_this198.l) {
  										case 0:
  											_this198.s0 = v55;
  											break;
  										case 1:
  											_this198.s1 = v55;
  											break;
  										case 2:
  											_this198.s2 = v55;
  											break;
  										case 3:
  											_this198.s3 = v55;
  											break;
  										case 4:
  											_this198.s4 = v55;
  											break;
  										case 5:
  											_this198.s5 = v55;
  											break;
  										default:
  											if(_this198.s6 == null) {
  												_this198.s6 = new justPath_StoreF6();
  											}
  											_this198.s6.push(v55);
  										}
  										_this198.l++;
  									}
  									_this197.l++;
  								}
  							} else {
  								var _this199 = this.store;
  								var v56 = parseFloat(temp8);
  								switch(_this199.l) {
  								case 0:
  									_this199.s0 = v56;
  									break;
  								case 1:
  									_this199.s1 = v56;
  									break;
  								case 2:
  									_this199.s2 = v56;
  									break;
  								case 3:
  									_this199.s3 = v56;
  									break;
  								case 4:
  									_this199.s4 = v56;
  									break;
  								case 5:
  									_this199.s5 = v56;
  									break;
  								default:
  									if(_this199.s6 == null) {
  										_this199.s6 = new justPath_StoreF6();
  									}
  									var _this200 = _this199.s6;
  									switch(_this200.l) {
  									case 0:
  										_this200.s0 = v56;
  										break;
  									case 1:
  										_this200.s1 = v56;
  										break;
  									case 2:
  										_this200.s2 = v56;
  										break;
  									case 3:
  										_this200.s3 = v56;
  										break;
  									case 4:
  										_this200.s4 = v56;
  										break;
  									case 5:
  										_this200.s5 = v56;
  										break;
  									default:
  										if(_this200.s6 == null) {
  											_this200.s6 = new justPath_StoreF6();
  										}
  										_this200.s6.push(v56);
  									}
  									_this200.l++;
  								}
  								_this199.l++;
  							}
  						}
  						temp8 = "-";
  						break;
  					case 46:
  						temp8 += ".";
  						break;
  					case 48:
  						temp8 += "0";
  						break;
  					case 49:
  						temp8 += "1";
  						break;
  					case 50:
  						temp8 += "2";
  						break;
  					case 51:
  						temp8 += "3";
  						break;
  					case 52:
  						temp8 += "4";
  						break;
  					case 53:
  						temp8 += "5";
  						break;
  					case 54:
  						temp8 += "6";
  						break;
  					case 55:
  						temp8 += "7";
  						break;
  					case 56:
  						temp8 += "8";
  						break;
  					case 57:
  						temp8 += "9";
  						break;
  					default:
  						if(temp8 != "") {
  							if(process1) {
  								if((this.store.l & 1) == 0) {
  									var _this201 = this.store;
  									var v57 = parseFloat(temp8);
  									switch(_this201.l) {
  									case 0:
  										_this201.s0 = v57;
  										break;
  									case 1:
  										_this201.s1 = v57;
  										break;
  									case 2:
  										_this201.s2 = v57;
  										break;
  									case 3:
  										_this201.s3 = v57;
  										break;
  									case 4:
  										_this201.s4 = v57;
  										break;
  									case 5:
  										_this201.s5 = v57;
  										break;
  									default:
  										if(_this201.s6 == null) {
  											_this201.s6 = new justPath_StoreF6();
  										}
  										var _this202 = _this201.s6;
  										switch(_this202.l) {
  										case 0:
  											_this202.s0 = v57;
  											break;
  										case 1:
  											_this202.s1 = v57;
  											break;
  										case 2:
  											_this202.s2 = v57;
  											break;
  										case 3:
  											_this202.s3 = v57;
  											break;
  										case 4:
  											_this202.s4 = v57;
  											break;
  										case 5:
  											_this202.s5 = v57;
  											break;
  										default:
  											if(_this202.s6 == null) {
  												_this202.s6 = new justPath_StoreF6();
  											}
  											_this202.s6.push(v57);
  										}
  										_this202.l++;
  									}
  									_this201.l++;
  								} else {
  									var _this203 = this.store;
  									var v58 = parseFloat(temp8);
  									switch(_this203.l) {
  									case 0:
  										_this203.s0 = v58;
  										break;
  									case 1:
  										_this203.s1 = v58;
  										break;
  									case 2:
  										_this203.s2 = v58;
  										break;
  									case 3:
  										_this203.s3 = v58;
  										break;
  									case 4:
  										_this203.s4 = v58;
  										break;
  									case 5:
  										_this203.s5 = v58;
  										break;
  									default:
  										if(_this203.s6 == null) {
  											_this203.s6 = new justPath_StoreF6();
  										}
  										var _this204 = _this203.s6;
  										switch(_this204.l) {
  										case 0:
  											_this204.s0 = v58;
  											break;
  										case 1:
  											_this204.s1 = v58;
  											break;
  										case 2:
  											_this204.s2 = v58;
  											break;
  										case 3:
  											_this204.s3 = v58;
  											break;
  										case 4:
  											_this204.s4 = v58;
  											break;
  										case 5:
  											_this204.s5 = v58;
  											break;
  										default:
  											if(_this204.s6 == null) {
  												_this204.s6 = new justPath_StoreF6();
  											}
  											_this204.s6.push(v58);
  										}
  										_this204.l++;
  									}
  									_this203.l++;
  								}
  							} else {
  								var _this205 = this.store;
  								var v59 = parseFloat(temp8);
  								switch(_this205.l) {
  								case 0:
  									_this205.s0 = v59;
  									break;
  								case 1:
  									_this205.s1 = v59;
  									break;
  								case 2:
  									_this205.s2 = v59;
  									break;
  								case 3:
  									_this205.s3 = v59;
  									break;
  								case 4:
  									_this205.s4 = v59;
  									break;
  								case 5:
  									_this205.s5 = v59;
  									break;
  								default:
  									if(_this205.s6 == null) {
  										_this205.s6 = new justPath_StoreF6();
  									}
  									var _this206 = _this205.s6;
  									switch(_this206.l) {
  									case 0:
  										_this206.s0 = v59;
  										break;
  									case 1:
  										_this206.s1 = v59;
  										break;
  									case 2:
  										_this206.s2 = v59;
  										break;
  									case 3:
  										_this206.s3 = v59;
  										break;
  									case 4:
  										_this206.s4 = v59;
  										break;
  									case 5:
  										_this206.s5 = v59;
  										break;
  									default:
  										if(_this206.s6 == null) {
  											_this206.s6 = new justPath_StoreF6();
  										}
  										_this206.s6.push(v59);
  									}
  									_this206.l++;
  								}
  								_this205.l++;
  							}
  							temp8 = "";
  						}
  						this.pos--;
  						exit8 = true;
  					}
  					if(exit8) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 1) {
  					var _this207 = this.store;
  					var out78 = _this207.s0;
  					if(_this207.l != 0) {
  						_this207.s0 = _this207.s1;
  						_this207.s1 = _this207.s2;
  						_this207.s2 = _this207.s3;
  						_this207.s3 = _this207.s4;
  						_this207.s4 = _this207.s5;
  						_this207.s5 = null;
  						if(_this207.s6 != null) {
  							var _this208 = _this207.s6;
  							var out79 = _this208.s0;
  							if(_this208.l != 0) {
  								_this208.s0 = _this208.s1;
  								_this208.s1 = _this208.s2;
  								_this208.s2 = _this208.s3;
  								_this208.s3 = _this208.s4;
  								_this208.s4 = _this208.s5;
  								_this208.s5 = null;
  								if(_this208.s6 != null) {
  									_this208.s5 = _this208.s6.shift();
  								}
  								_this208.l--;
  							}
  							_this207.s5 = out79;
  						}
  						_this207.l--;
  					}
  					this.lastY = out78;
  					this.pathContext.lineTo(this.lastX,this.lastY);
  				} else if(this.store.l > 1) {
  					while(this.store.l > 0) {
  						var _this209 = this.store;
  						var out80 = _this209.s0;
  						if(_this209.l != 0) {
  							_this209.s0 = _this209.s1;
  							_this209.s1 = _this209.s2;
  							_this209.s2 = _this209.s3;
  							_this209.s3 = _this209.s4;
  							_this209.s4 = _this209.s5;
  							_this209.s5 = null;
  							if(_this209.s6 != null) {
  								var _this210 = _this209.s6;
  								var out81 = _this210.s0;
  								if(_this210.l != 0) {
  									_this210.s0 = _this210.s1;
  									_this210.s1 = _this210.s2;
  									_this210.s2 = _this210.s3;
  									_this210.s3 = _this210.s4;
  									_this210.s4 = _this210.s5;
  									_this210.s5 = null;
  									if(_this210.s6 != null) {
  										_this210.s5 = _this210.s6.shift();
  									}
  									_this210.l--;
  								}
  								_this209.s5 = out81;
  							}
  							_this209.l--;
  						}
  						this.lastY = out80;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 90:case 122:
  				this.lastX = 0;
  				this.lastY = 0;
  				break;
  			case 97:
  				var _this211 = this.store;
  				_this211.l = 0;
  				_this211.s0 = null;
  				_this211.s1 = null;
  				_this211.s2 = null;
  				_this211.s3 = null;
  				_this211.s4 = null;
  				_this211.s5 = null;
  				_this211.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp9 = "";
  				var exit9 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp9 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this212 = this.store;
  								var v60 = parseFloat(temp9);
  								switch(_this212.l) {
  								case 0:
  									_this212.s0 = v60;
  									break;
  								case 1:
  									_this212.s1 = v60;
  									break;
  								case 2:
  									_this212.s2 = v60;
  									break;
  								case 3:
  									_this212.s3 = v60;
  									break;
  								case 4:
  									_this212.s4 = v60;
  									break;
  								case 5:
  									_this212.s5 = v60;
  									break;
  								default:
  									if(_this212.s6 == null) {
  										_this212.s6 = new justPath_StoreF6();
  									}
  									var _this213 = _this212.s6;
  									switch(_this213.l) {
  									case 0:
  										_this213.s0 = v60;
  										break;
  									case 1:
  										_this213.s1 = v60;
  										break;
  									case 2:
  										_this213.s2 = v60;
  										break;
  									case 3:
  										_this213.s3 = v60;
  										break;
  									case 4:
  										_this213.s4 = v60;
  										break;
  									case 5:
  										_this213.s5 = v60;
  										break;
  									default:
  										if(_this213.s6 == null) {
  											_this213.s6 = new justPath_StoreF6();
  										}
  										_this213.s6.push(v60);
  									}
  									_this213.l++;
  								}
  								_this212.l++;
  							} else {
  								var _this214 = this.store;
  								var v61 = parseFloat(temp9);
  								switch(_this214.l) {
  								case 0:
  									_this214.s0 = v61;
  									break;
  								case 1:
  									_this214.s1 = v61;
  									break;
  								case 2:
  									_this214.s2 = v61;
  									break;
  								case 3:
  									_this214.s3 = v61;
  									break;
  								case 4:
  									_this214.s4 = v61;
  									break;
  								case 5:
  									_this214.s5 = v61;
  									break;
  								default:
  									if(_this214.s6 == null) {
  										_this214.s6 = new justPath_StoreF6();
  									}
  									var _this215 = _this214.s6;
  									switch(_this215.l) {
  									case 0:
  										_this215.s0 = v61;
  										break;
  									case 1:
  										_this215.s1 = v61;
  										break;
  									case 2:
  										_this215.s2 = v61;
  										break;
  									case 3:
  										_this215.s3 = v61;
  										break;
  									case 4:
  										_this215.s4 = v61;
  										break;
  									case 5:
  										_this215.s5 = v61;
  										break;
  									default:
  										if(_this215.s6 == null) {
  											_this215.s6 = new justPath_StoreF6();
  										}
  										_this215.s6.push(v61);
  									}
  									_this215.l++;
  								}
  								_this214.l++;
  							}
  							temp9 = "";
  						}
  						break;
  					case 45:
  						if(temp9 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this216 = this.store;
  								var v62 = parseFloat(temp9);
  								switch(_this216.l) {
  								case 0:
  									_this216.s0 = v62;
  									break;
  								case 1:
  									_this216.s1 = v62;
  									break;
  								case 2:
  									_this216.s2 = v62;
  									break;
  								case 3:
  									_this216.s3 = v62;
  									break;
  								case 4:
  									_this216.s4 = v62;
  									break;
  								case 5:
  									_this216.s5 = v62;
  									break;
  								default:
  									if(_this216.s6 == null) {
  										_this216.s6 = new justPath_StoreF6();
  									}
  									var _this217 = _this216.s6;
  									switch(_this217.l) {
  									case 0:
  										_this217.s0 = v62;
  										break;
  									case 1:
  										_this217.s1 = v62;
  										break;
  									case 2:
  										_this217.s2 = v62;
  										break;
  									case 3:
  										_this217.s3 = v62;
  										break;
  									case 4:
  										_this217.s4 = v62;
  										break;
  									case 5:
  										_this217.s5 = v62;
  										break;
  									default:
  										if(_this217.s6 == null) {
  											_this217.s6 = new justPath_StoreF6();
  										}
  										_this217.s6.push(v62);
  									}
  									_this217.l++;
  								}
  								_this216.l++;
  							} else {
  								var _this218 = this.store;
  								var v63 = parseFloat(temp9);
  								switch(_this218.l) {
  								case 0:
  									_this218.s0 = v63;
  									break;
  								case 1:
  									_this218.s1 = v63;
  									break;
  								case 2:
  									_this218.s2 = v63;
  									break;
  								case 3:
  									_this218.s3 = v63;
  									break;
  								case 4:
  									_this218.s4 = v63;
  									break;
  								case 5:
  									_this218.s5 = v63;
  									break;
  								default:
  									if(_this218.s6 == null) {
  										_this218.s6 = new justPath_StoreF6();
  									}
  									var _this219 = _this218.s6;
  									switch(_this219.l) {
  									case 0:
  										_this219.s0 = v63;
  										break;
  									case 1:
  										_this219.s1 = v63;
  										break;
  									case 2:
  										_this219.s2 = v63;
  										break;
  									case 3:
  										_this219.s3 = v63;
  										break;
  									case 4:
  										_this219.s4 = v63;
  										break;
  									case 5:
  										_this219.s5 = v63;
  										break;
  									default:
  										if(_this219.s6 == null) {
  											_this219.s6 = new justPath_StoreF6();
  										}
  										_this219.s6.push(v63);
  									}
  									_this219.l++;
  								}
  								_this218.l++;
  							}
  						}
  						temp9 = "-";
  						break;
  					case 46:
  						temp9 += ".";
  						break;
  					case 48:
  						temp9 += "0";
  						break;
  					case 49:
  						temp9 += "1";
  						break;
  					case 50:
  						temp9 += "2";
  						break;
  					case 51:
  						temp9 += "3";
  						break;
  					case 52:
  						temp9 += "4";
  						break;
  					case 53:
  						temp9 += "5";
  						break;
  					case 54:
  						temp9 += "6";
  						break;
  					case 55:
  						temp9 += "7";
  						break;
  					case 56:
  						temp9 += "8";
  						break;
  					case 57:
  						temp9 += "9";
  						break;
  					default:
  						if(temp9 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this220 = this.store;
  								var v64 = parseFloat(temp9);
  								switch(_this220.l) {
  								case 0:
  									_this220.s0 = v64;
  									break;
  								case 1:
  									_this220.s1 = v64;
  									break;
  								case 2:
  									_this220.s2 = v64;
  									break;
  								case 3:
  									_this220.s3 = v64;
  									break;
  								case 4:
  									_this220.s4 = v64;
  									break;
  								case 5:
  									_this220.s5 = v64;
  									break;
  								default:
  									if(_this220.s6 == null) {
  										_this220.s6 = new justPath_StoreF6();
  									}
  									var _this221 = _this220.s6;
  									switch(_this221.l) {
  									case 0:
  										_this221.s0 = v64;
  										break;
  									case 1:
  										_this221.s1 = v64;
  										break;
  									case 2:
  										_this221.s2 = v64;
  										break;
  									case 3:
  										_this221.s3 = v64;
  										break;
  									case 4:
  										_this221.s4 = v64;
  										break;
  									case 5:
  										_this221.s5 = v64;
  										break;
  									default:
  										if(_this221.s6 == null) {
  											_this221.s6 = new justPath_StoreF6();
  										}
  										_this221.s6.push(v64);
  									}
  									_this221.l++;
  								}
  								_this220.l++;
  							} else {
  								var _this222 = this.store;
  								var v65 = parseFloat(temp9);
  								switch(_this222.l) {
  								case 0:
  									_this222.s0 = v65;
  									break;
  								case 1:
  									_this222.s1 = v65;
  									break;
  								case 2:
  									_this222.s2 = v65;
  									break;
  								case 3:
  									_this222.s3 = v65;
  									break;
  								case 4:
  									_this222.s4 = v65;
  									break;
  								case 5:
  									_this222.s5 = v65;
  									break;
  								default:
  									if(_this222.s6 == null) {
  										_this222.s6 = new justPath_StoreF6();
  									}
  									var _this223 = _this222.s6;
  									switch(_this223.l) {
  									case 0:
  										_this223.s0 = v65;
  										break;
  									case 1:
  										_this223.s1 = v65;
  										break;
  									case 2:
  										_this223.s2 = v65;
  										break;
  									case 3:
  										_this223.s3 = v65;
  										break;
  									case 4:
  										_this223.s4 = v65;
  										break;
  									case 5:
  										_this223.s5 = v65;
  										break;
  									default:
  										if(_this223.s6 == null) {
  											_this223.s6 = new justPath_StoreF6();
  										}
  										_this223.s6.push(v65);
  									}
  									_this223.l++;
  								}
  								_this222.l++;
  							}
  							temp9 = "";
  						}
  						this.pos--;
  						exit9 = true;
  					}
  					if(exit9) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 7) {
  					var sx4 = this.lastX;
  					var sy4 = this.lastY;
  					var _this224 = this.store;
  					var out82 = _this224.s0;
  					if(_this224.l != 0) {
  						_this224.s0 = _this224.s1;
  						_this224.s1 = _this224.s2;
  						_this224.s2 = _this224.s3;
  						_this224.s3 = _this224.s4;
  						_this224.s4 = _this224.s5;
  						_this224.s5 = null;
  						if(_this224.s6 != null) {
  							var _this225 = _this224.s6;
  							var out83 = _this225.s0;
  							if(_this225.l != 0) {
  								_this225.s0 = _this225.s1;
  								_this225.s1 = _this225.s2;
  								_this225.s2 = _this225.s3;
  								_this225.s3 = _this225.s4;
  								_this225.s4 = _this225.s5;
  								_this225.s5 = null;
  								if(_this225.s6 != null) {
  									_this225.s5 = _this225.s6.shift();
  								}
  								_this225.l--;
  							}
  							_this224.s5 = out83;
  						}
  						_this224.l--;
  					}
  					var xr2 = out82;
  					var _this226 = this.store;
  					var out84 = _this226.s0;
  					if(_this226.l != 0) {
  						_this226.s0 = _this226.s1;
  						_this226.s1 = _this226.s2;
  						_this226.s2 = _this226.s3;
  						_this226.s3 = _this226.s4;
  						_this226.s4 = _this226.s5;
  						_this226.s5 = null;
  						if(_this226.s6 != null) {
  							var _this227 = _this226.s6;
  							var out85 = _this227.s0;
  							if(_this227.l != 0) {
  								_this227.s0 = _this227.s1;
  								_this227.s1 = _this227.s2;
  								_this227.s2 = _this227.s3;
  								_this227.s3 = _this227.s4;
  								_this227.s4 = _this227.s5;
  								_this227.s5 = null;
  								if(_this227.s6 != null) {
  									_this227.s5 = _this227.s6.shift();
  								}
  								_this227.l--;
  							}
  							_this226.s5 = out85;
  						}
  						_this226.l--;
  					}
  					var yr2 = out84;
  					var _this228 = this.store;
  					var out86 = _this228.s0;
  					if(_this228.l != 0) {
  						_this228.s0 = _this228.s1;
  						_this228.s1 = _this228.s2;
  						_this228.s2 = _this228.s3;
  						_this228.s3 = _this228.s4;
  						_this228.s4 = _this228.s5;
  						_this228.s5 = null;
  						if(_this228.s6 != null) {
  							var _this229 = _this228.s6;
  							var out87 = _this229.s0;
  							if(_this229.l != 0) {
  								_this229.s0 = _this229.s1;
  								_this229.s1 = _this229.s2;
  								_this229.s2 = _this229.s3;
  								_this229.s3 = _this229.s4;
  								_this229.s4 = _this229.s5;
  								_this229.s5 = null;
  								if(_this229.s6 != null) {
  									_this229.s5 = _this229.s6.shift();
  								}
  								_this229.l--;
  							}
  							_this228.s5 = out87;
  						}
  						_this228.l--;
  					}
  					var phi4 = out86;
  					var _this230 = this.store;
  					var out88 = _this230.s0;
  					if(_this230.l != 0) {
  						_this230.s0 = _this230.s1;
  						_this230.s1 = _this230.s2;
  						_this230.s2 = _this230.s3;
  						_this230.s3 = _this230.s4;
  						_this230.s4 = _this230.s5;
  						_this230.s5 = null;
  						if(_this230.s6 != null) {
  							var _this231 = _this230.s6;
  							var out89 = _this231.s0;
  							if(_this231.l != 0) {
  								_this231.s0 = _this231.s1;
  								_this231.s1 = _this231.s2;
  								_this231.s2 = _this231.s3;
  								_this231.s3 = _this231.s4;
  								_this231.s4 = _this231.s5;
  								_this231.s5 = null;
  								if(_this231.s6 != null) {
  									var _this232 = _this231.s6;
  									var out90 = _this232.s0;
  									if(_this232.l != 0) {
  										_this232.s0 = _this232.s1;
  										_this232.s1 = _this232.s2;
  										_this232.s2 = _this232.s3;
  										_this232.s3 = _this232.s4;
  										_this232.s4 = _this232.s5;
  										_this232.s5 = null;
  										if(_this232.s6 != null) {
  											_this232.s5 = _this232.s6.shift();
  										}
  										_this232.l--;
  									}
  									_this231.s5 = out90;
  								}
  								_this231.l--;
  							}
  							_this230.s5 = out89;
  						}
  						_this230.l--;
  					}
  					var large2 = out88 | 0;
  					var _this233 = this.store;
  					var out91 = _this233.s0;
  					if(_this233.l != 0) {
  						_this233.s0 = _this233.s1;
  						_this233.s1 = _this233.s2;
  						_this233.s2 = _this233.s3;
  						_this233.s3 = _this233.s4;
  						_this233.s4 = _this233.s5;
  						_this233.s5 = null;
  						if(_this233.s6 != null) {
  							var _this234 = _this233.s6;
  							var out92 = _this234.s0;
  							if(_this234.l != 0) {
  								_this234.s0 = _this234.s1;
  								_this234.s1 = _this234.s2;
  								_this234.s2 = _this234.s3;
  								_this234.s3 = _this234.s4;
  								_this234.s4 = _this234.s5;
  								_this234.s5 = null;
  								if(_this234.s6 != null) {
  									var _this235 = _this234.s6;
  									var out93 = _this235.s0;
  									if(_this235.l != 0) {
  										_this235.s0 = _this235.s1;
  										_this235.s1 = _this235.s2;
  										_this235.s2 = _this235.s3;
  										_this235.s3 = _this235.s4;
  										_this235.s4 = _this235.s5;
  										_this235.s5 = null;
  										if(_this235.s6 != null) {
  											_this235.s5 = _this235.s6.shift();
  										}
  										_this235.l--;
  									}
  									_this234.s5 = out93;
  								}
  								_this234.l--;
  							}
  							_this233.s5 = out92;
  						}
  						_this233.l--;
  					}
  					var sweep2 = out91 | 0;
  					var _this236 = this.store;
  					var out94 = _this236.s0;
  					if(_this236.l != 0) {
  						_this236.s0 = _this236.s1;
  						_this236.s1 = _this236.s2;
  						_this236.s2 = _this236.s3;
  						_this236.s3 = _this236.s4;
  						_this236.s4 = _this236.s5;
  						_this236.s5 = null;
  						if(_this236.s6 != null) {
  							var _this237 = _this236.s6;
  							var out95 = _this237.s0;
  							if(_this237.l != 0) {
  								_this237.s0 = _this237.s1;
  								_this237.s1 = _this237.s2;
  								_this237.s2 = _this237.s3;
  								_this237.s3 = _this237.s4;
  								_this237.s4 = _this237.s5;
  								_this237.s5 = null;
  								if(_this237.s6 != null) {
  									_this237.s5 = _this237.s6.shift();
  								}
  								_this237.l--;
  							}
  							_this236.s5 = out95;
  						}
  						_this236.l--;
  					}
  					this.lastX = out94 + this.lastX;
  					var _this238 = this.store;
  					var out96 = _this238.s0;
  					if(_this238.l != 0) {
  						_this238.s0 = _this238.s1;
  						_this238.s1 = _this238.s2;
  						_this238.s2 = _this238.s3;
  						_this238.s3 = _this238.s4;
  						_this238.s4 = _this238.s5;
  						_this238.s5 = null;
  						if(_this238.s6 != null) {
  							var _this239 = _this238.s6;
  							var out97 = _this239.s0;
  							if(_this239.l != 0) {
  								_this239.s0 = _this239.s1;
  								_this239.s1 = _this239.s2;
  								_this239.s2 = _this239.s3;
  								_this239.s3 = _this239.s4;
  								_this239.s4 = _this239.s5;
  								_this239.s5 = null;
  								if(_this239.s6 != null) {
  									_this239.s5 = _this239.s6.shift();
  								}
  								_this239.l--;
  							}
  							_this238.s5 = out97;
  						}
  						_this238.l--;
  					}
  					this.lastY = out96 + this.lastY;
  					var sx5 = sx4;
  					var sy5 = sy4;
  					var phi5 = phi4;
  					var ex2 = this.lastX;
  					var ey2 = this.lastY;
  					var mx2 = (sx5 - ex2) / 2;
  					var my2 = (sy5 - ey2) / 2;
  					var ax2 = (sx5 + ex2) / 2;
  					var ay2 = (sy5 + ey2) / 2;
  					phi5 %= 360;
  					phi5 = phi5 * Math.PI / 180;
  					var sin2 = Math.sin(phi5);
  					var cos2 = Math.cos(phi5);
  					var x12 = mx2 * cos2 + my2 * sin2;
  					var y12 = -mx2 * sin2 + my2 * cos2;
  					var rx2 = Math.abs(xr2);
  					var ry2 = Math.abs(yr2);
  					var rxx2 = rx2 * rx2;
  					var ryy2 = ry2 * ry2;
  					var xx12 = x12 * x12;
  					var yy12 = y12 * y12;
  					var check2 = xx12 / rxx2 + yy12 / ryy2;
  					if(check2 > 1) {
  						rx2 *= Math.sqrt(check2);
  						ry2 *= Math.sqrt(check2);
  						rxx2 = rx2 * rx2;
  						ryy2 = ry2 * ry2;
  					}
  					var sign2 = large2 == sweep2 ? -1 : 1;
  					var sq2 = (rxx2 * ryy2 - rxx2 * yy12 - ryy2 * xx12) / (rxx2 * yy12 + ryy2 * xx12);
  					if(sq2 < 0) {
  						sq2 = 0;
  					}
  					var coef2 = sign2 * Math.sqrt(sq2);
  					var cx12 = coef2 * rx2 * y12 / ry2;
  					var cy12 = -coef2 * ry2 * x12 / rx2;
  					var cx3 = ax2 + cx12 * cos2 - cy12 * sin2;
  					var cy3 = ay2 + cx12 * sin2 + cy12 * cos2;
  					var phiSin2 = Math.sin(-phi5);
  					var phiCos2 = Math.cos(-phi5);
  					sx5 -= cx3;
  					sy5 -= cy3;
  					var dx4 = sx5;
  					var dy4 = sy5;
  					sx5 = dx4 * phiCos2 - dy4 * phiSin2;
  					sy5 = dx4 * phiSin2 + dy4 * phiCos2;
  					sx5 += cx3;
  					sy5 += cy3;
  					ex2 -= cx3;
  					ey2 -= cy3;
  					var dx5 = ex2;
  					var dy5 = ey2;
  					ex2 = dx5 * phiCos2 - dy5 * phiSin2;
  					ey2 = dx5 * phiSin2 + dy5 * phiCos2;
  					ex2 += cx3;
  					ey2 += cy3;
  					var alpha2 = Math.atan2(rx2 * (cy3 - sy5),ry2 * (cx3 - sx5)) - Math.PI;
  					var omega2 = Math.atan2(rx2 * (cy3 - ey2),ry2 * (cx3 - ex2)) - Math.PI;
  					var delta2 = alpha2 - omega2;
  					if(sweep2 == 1 && delta2 > 0) {
  						delta2 -= 2 * Math.PI;
  					} else if(sweep2 == 0 && delta2 < 0) {
  						delta2 += 2 * Math.PI;
  					}
  					var this3 = { cx : cx3, cy : cy3, rx : rx2, ry : ry2, alpha : alpha2, omega : omega2, delta : -delta2, phi : phi5, phiSin : Math.sin(phi5), phiCos : Math.cos(phi5)};
  					var ellipseData2 = this3;
  					var ellipse2 = new justPath_EllipseArc(ellipseData2);
  					ellipse2.lineRender(($_=this.pathContext,$bind($_,$_.moveTo)),($_=this.pathContext,$bind($_,$_.lineTo)),Math.PI / 18);
  				} else if(this.store.l > 7) {
  					while(this.store.l > 6) {
  						var sx6 = this.lastX;
  						var sy6 = this.lastY;
  						var _this240 = this.store;
  						var out98 = _this240.s0;
  						if(_this240.l != 0) {
  							_this240.s0 = _this240.s1;
  							_this240.s1 = _this240.s2;
  							_this240.s2 = _this240.s3;
  							_this240.s3 = _this240.s4;
  							_this240.s4 = _this240.s5;
  							_this240.s5 = null;
  							if(_this240.s6 != null) {
  								var _this241 = _this240.s6;
  								var out99 = _this241.s0;
  								if(_this241.l != 0) {
  									_this241.s0 = _this241.s1;
  									_this241.s1 = _this241.s2;
  									_this241.s2 = _this241.s3;
  									_this241.s3 = _this241.s4;
  									_this241.s4 = _this241.s5;
  									_this241.s5 = null;
  									if(_this241.s6 != null) {
  										_this241.s5 = _this241.s6.shift();
  									}
  									_this241.l--;
  								}
  								_this240.s5 = out99;
  							}
  							_this240.l--;
  						}
  						var xr3 = out98;
  						var _this242 = this.store;
  						var out100 = _this242.s0;
  						if(_this242.l != 0) {
  							_this242.s0 = _this242.s1;
  							_this242.s1 = _this242.s2;
  							_this242.s2 = _this242.s3;
  							_this242.s3 = _this242.s4;
  							_this242.s4 = _this242.s5;
  							_this242.s5 = null;
  							if(_this242.s6 != null) {
  								var _this243 = _this242.s6;
  								var out101 = _this243.s0;
  								if(_this243.l != 0) {
  									_this243.s0 = _this243.s1;
  									_this243.s1 = _this243.s2;
  									_this243.s2 = _this243.s3;
  									_this243.s3 = _this243.s4;
  									_this243.s4 = _this243.s5;
  									_this243.s5 = null;
  									if(_this243.s6 != null) {
  										_this243.s5 = _this243.s6.shift();
  									}
  									_this243.l--;
  								}
  								_this242.s5 = out101;
  							}
  							_this242.l--;
  						}
  						var yr3 = out100;
  						var _this244 = this.store;
  						var out102 = _this244.s0;
  						if(_this244.l != 0) {
  							_this244.s0 = _this244.s1;
  							_this244.s1 = _this244.s2;
  							_this244.s2 = _this244.s3;
  							_this244.s3 = _this244.s4;
  							_this244.s4 = _this244.s5;
  							_this244.s5 = null;
  							if(_this244.s6 != null) {
  								var _this245 = _this244.s6;
  								var out103 = _this245.s0;
  								if(_this245.l != 0) {
  									_this245.s0 = _this245.s1;
  									_this245.s1 = _this245.s2;
  									_this245.s2 = _this245.s3;
  									_this245.s3 = _this245.s4;
  									_this245.s4 = _this245.s5;
  									_this245.s5 = null;
  									if(_this245.s6 != null) {
  										_this245.s5 = _this245.s6.shift();
  									}
  									_this245.l--;
  								}
  								_this244.s5 = out103;
  							}
  							_this244.l--;
  						}
  						var phi6 = out102;
  						var _this246 = this.store;
  						var out104 = _this246.s0;
  						if(_this246.l != 0) {
  							_this246.s0 = _this246.s1;
  							_this246.s1 = _this246.s2;
  							_this246.s2 = _this246.s3;
  							_this246.s3 = _this246.s4;
  							_this246.s4 = _this246.s5;
  							_this246.s5 = null;
  							if(_this246.s6 != null) {
  								var _this247 = _this246.s6;
  								var out105 = _this247.s0;
  								if(_this247.l != 0) {
  									_this247.s0 = _this247.s1;
  									_this247.s1 = _this247.s2;
  									_this247.s2 = _this247.s3;
  									_this247.s3 = _this247.s4;
  									_this247.s4 = _this247.s5;
  									_this247.s5 = null;
  									if(_this247.s6 != null) {
  										var _this248 = _this247.s6;
  										var out106 = _this248.s0;
  										if(_this248.l != 0) {
  											_this248.s0 = _this248.s1;
  											_this248.s1 = _this248.s2;
  											_this248.s2 = _this248.s3;
  											_this248.s3 = _this248.s4;
  											_this248.s4 = _this248.s5;
  											_this248.s5 = null;
  											if(_this248.s6 != null) {
  												_this248.s5 = _this248.s6.shift();
  											}
  											_this248.l--;
  										}
  										_this247.s5 = out106;
  									}
  									_this247.l--;
  								}
  								_this246.s5 = out105;
  							}
  							_this246.l--;
  						}
  						var large3 = out104 | 0;
  						var _this249 = this.store;
  						var out107 = _this249.s0;
  						if(_this249.l != 0) {
  							_this249.s0 = _this249.s1;
  							_this249.s1 = _this249.s2;
  							_this249.s2 = _this249.s3;
  							_this249.s3 = _this249.s4;
  							_this249.s4 = _this249.s5;
  							_this249.s5 = null;
  							if(_this249.s6 != null) {
  								var _this250 = _this249.s6;
  								var out108 = _this250.s0;
  								if(_this250.l != 0) {
  									_this250.s0 = _this250.s1;
  									_this250.s1 = _this250.s2;
  									_this250.s2 = _this250.s3;
  									_this250.s3 = _this250.s4;
  									_this250.s4 = _this250.s5;
  									_this250.s5 = null;
  									if(_this250.s6 != null) {
  										var _this251 = _this250.s6;
  										var out109 = _this251.s0;
  										if(_this251.l != 0) {
  											_this251.s0 = _this251.s1;
  											_this251.s1 = _this251.s2;
  											_this251.s2 = _this251.s3;
  											_this251.s3 = _this251.s4;
  											_this251.s4 = _this251.s5;
  											_this251.s5 = null;
  											if(_this251.s6 != null) {
  												_this251.s5 = _this251.s6.shift();
  											}
  											_this251.l--;
  										}
  										_this250.s5 = out109;
  									}
  									_this250.l--;
  								}
  								_this249.s5 = out108;
  							}
  							_this249.l--;
  						}
  						var sweep3 = out107 | 0;
  						var _this252 = this.store;
  						var out110 = _this252.s0;
  						if(_this252.l != 0) {
  							_this252.s0 = _this252.s1;
  							_this252.s1 = _this252.s2;
  							_this252.s2 = _this252.s3;
  							_this252.s3 = _this252.s4;
  							_this252.s4 = _this252.s5;
  							_this252.s5 = null;
  							if(_this252.s6 != null) {
  								var _this253 = _this252.s6;
  								var out111 = _this253.s0;
  								if(_this253.l != 0) {
  									_this253.s0 = _this253.s1;
  									_this253.s1 = _this253.s2;
  									_this253.s2 = _this253.s3;
  									_this253.s3 = _this253.s4;
  									_this253.s4 = _this253.s5;
  									_this253.s5 = null;
  									if(_this253.s6 != null) {
  										_this253.s5 = _this253.s6.shift();
  									}
  									_this253.l--;
  								}
  								_this252.s5 = out111;
  							}
  							_this252.l--;
  						}
  						this.lastX = out110 + this.lastX;
  						var _this254 = this.store;
  						var out112 = _this254.s0;
  						if(_this254.l != 0) {
  							_this254.s0 = _this254.s1;
  							_this254.s1 = _this254.s2;
  							_this254.s2 = _this254.s3;
  							_this254.s3 = _this254.s4;
  							_this254.s4 = _this254.s5;
  							_this254.s5 = null;
  							if(_this254.s6 != null) {
  								var _this255 = _this254.s6;
  								var out113 = _this255.s0;
  								if(_this255.l != 0) {
  									_this255.s0 = _this255.s1;
  									_this255.s1 = _this255.s2;
  									_this255.s2 = _this255.s3;
  									_this255.s3 = _this255.s4;
  									_this255.s4 = _this255.s5;
  									_this255.s5 = null;
  									if(_this255.s6 != null) {
  										_this255.s5 = _this255.s6.shift();
  									}
  									_this255.l--;
  								}
  								_this254.s5 = out113;
  							}
  							_this254.l--;
  						}
  						this.lastY = out112 + this.lastY;
  						var sx7 = sx6;
  						var sy7 = sy6;
  						var phi7 = phi6;
  						var ex3 = this.lastX;
  						var ey3 = this.lastY;
  						var mx3 = (sx7 - ex3) / 2;
  						var my3 = (sy7 - ey3) / 2;
  						var ax3 = (sx7 + ex3) / 2;
  						var ay3 = (sy7 + ey3) / 2;
  						phi7 %= 360;
  						phi7 = phi7 * Math.PI / 180;
  						var sin3 = Math.sin(phi7);
  						var cos3 = Math.cos(phi7);
  						var x13 = mx3 * cos3 + my3 * sin3;
  						var y13 = -mx3 * sin3 + my3 * cos3;
  						var rx3 = Math.abs(xr3);
  						var ry3 = Math.abs(yr3);
  						var rxx3 = rx3 * rx3;
  						var ryy3 = ry3 * ry3;
  						var xx13 = x13 * x13;
  						var yy13 = y13 * y13;
  						var check3 = xx13 / rxx3 + yy13 / ryy3;
  						if(check3 > 1) {
  							rx3 *= Math.sqrt(check3);
  							ry3 *= Math.sqrt(check3);
  							rxx3 = rx3 * rx3;
  							ryy3 = ry3 * ry3;
  						}
  						var sign3 = large3 == sweep3 ? -1 : 1;
  						var sq3 = (rxx3 * ryy3 - rxx3 * yy13 - ryy3 * xx13) / (rxx3 * yy13 + ryy3 * xx13);
  						if(sq3 < 0) {
  							sq3 = 0;
  						}
  						var coef3 = sign3 * Math.sqrt(sq3);
  						var cx13 = coef3 * rx3 * y13 / ry3;
  						var cy13 = -coef3 * ry3 * x13 / rx3;
  						var cx4 = ax3 + cx13 * cos3 - cy13 * sin3;
  						var cy4 = ay3 + cx13 * sin3 + cy13 * cos3;
  						var phiSin3 = Math.sin(-phi7);
  						var phiCos3 = Math.cos(-phi7);
  						sx7 -= cx4;
  						sy7 -= cy4;
  						var dx6 = sx7;
  						var dy6 = sy7;
  						sx7 = dx6 * phiCos3 - dy6 * phiSin3;
  						sy7 = dx6 * phiSin3 + dy6 * phiCos3;
  						sx7 += cx4;
  						sy7 += cy4;
  						ex3 -= cx4;
  						ey3 -= cy4;
  						var dx7 = ex3;
  						var dy7 = ey3;
  						ex3 = dx7 * phiCos3 - dy7 * phiSin3;
  						ey3 = dx7 * phiSin3 + dy7 * phiCos3;
  						ex3 += cx4;
  						ey3 += cy4;
  						var alpha3 = Math.atan2(rx3 * (cy4 - sy7),ry3 * (cx4 - sx7)) - Math.PI;
  						var omega3 = Math.atan2(rx3 * (cy4 - ey3),ry3 * (cx4 - ex3)) - Math.PI;
  						var delta3 = alpha3 - omega3;
  						if(sweep3 == 1 && delta3 > 0) {
  							delta3 -= 2 * Math.PI;
  						} else if(sweep3 == 0 && delta3 < 0) {
  							delta3 += 2 * Math.PI;
  						}
  						var this4 = { cx : cx4, cy : cy4, rx : rx3, ry : ry3, alpha : alpha3, omega : omega3, delta : -delta3, phi : phi7, phiSin : Math.sin(phi7), phiCos : Math.cos(phi7)};
  						var ellipseData3 = this4;
  						var ellipse3 = new justPath_EllipseArc(ellipseData3);
  						ellipse3.lineRender(($_=this.pathContext,$bind($_,$_.moveTo)),($_=this.pathContext,$bind($_,$_.lineTo)),Math.PI / 18);
  					}
  				}
  				break;
  			case 99:
  				var _this256 = this.store;
  				_this256.l = 0;
  				_this256.s0 = null;
  				_this256.s1 = null;
  				_this256.s2 = null;
  				_this256.s3 = null;
  				_this256.s4 = null;
  				_this256.s5 = null;
  				_this256.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp10 = "";
  				var exit10 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp10 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this257 = this.store;
  								var v66 = parseFloat(temp10);
  								switch(_this257.l) {
  								case 0:
  									_this257.s0 = v66;
  									break;
  								case 1:
  									_this257.s1 = v66;
  									break;
  								case 2:
  									_this257.s2 = v66;
  									break;
  								case 3:
  									_this257.s3 = v66;
  									break;
  								case 4:
  									_this257.s4 = v66;
  									break;
  								case 5:
  									_this257.s5 = v66;
  									break;
  								default:
  									if(_this257.s6 == null) {
  										_this257.s6 = new justPath_StoreF6();
  									}
  									var _this258 = _this257.s6;
  									switch(_this258.l) {
  									case 0:
  										_this258.s0 = v66;
  										break;
  									case 1:
  										_this258.s1 = v66;
  										break;
  									case 2:
  										_this258.s2 = v66;
  										break;
  									case 3:
  										_this258.s3 = v66;
  										break;
  									case 4:
  										_this258.s4 = v66;
  										break;
  									case 5:
  										_this258.s5 = v66;
  										break;
  									default:
  										if(_this258.s6 == null) {
  											_this258.s6 = new justPath_StoreF6();
  										}
  										_this258.s6.push(v66);
  									}
  									_this258.l++;
  								}
  								_this257.l++;
  							} else {
  								var _this259 = this.store;
  								var v67 = parseFloat(temp10);
  								switch(_this259.l) {
  								case 0:
  									_this259.s0 = v67;
  									break;
  								case 1:
  									_this259.s1 = v67;
  									break;
  								case 2:
  									_this259.s2 = v67;
  									break;
  								case 3:
  									_this259.s3 = v67;
  									break;
  								case 4:
  									_this259.s4 = v67;
  									break;
  								case 5:
  									_this259.s5 = v67;
  									break;
  								default:
  									if(_this259.s6 == null) {
  										_this259.s6 = new justPath_StoreF6();
  									}
  									var _this260 = _this259.s6;
  									switch(_this260.l) {
  									case 0:
  										_this260.s0 = v67;
  										break;
  									case 1:
  										_this260.s1 = v67;
  										break;
  									case 2:
  										_this260.s2 = v67;
  										break;
  									case 3:
  										_this260.s3 = v67;
  										break;
  									case 4:
  										_this260.s4 = v67;
  										break;
  									case 5:
  										_this260.s5 = v67;
  										break;
  									default:
  										if(_this260.s6 == null) {
  											_this260.s6 = new justPath_StoreF6();
  										}
  										_this260.s6.push(v67);
  									}
  									_this260.l++;
  								}
  								_this259.l++;
  							}
  							temp10 = "";
  						}
  						break;
  					case 45:
  						if(temp10 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this261 = this.store;
  								var v68 = parseFloat(temp10);
  								switch(_this261.l) {
  								case 0:
  									_this261.s0 = v68;
  									break;
  								case 1:
  									_this261.s1 = v68;
  									break;
  								case 2:
  									_this261.s2 = v68;
  									break;
  								case 3:
  									_this261.s3 = v68;
  									break;
  								case 4:
  									_this261.s4 = v68;
  									break;
  								case 5:
  									_this261.s5 = v68;
  									break;
  								default:
  									if(_this261.s6 == null) {
  										_this261.s6 = new justPath_StoreF6();
  									}
  									var _this262 = _this261.s6;
  									switch(_this262.l) {
  									case 0:
  										_this262.s0 = v68;
  										break;
  									case 1:
  										_this262.s1 = v68;
  										break;
  									case 2:
  										_this262.s2 = v68;
  										break;
  									case 3:
  										_this262.s3 = v68;
  										break;
  									case 4:
  										_this262.s4 = v68;
  										break;
  									case 5:
  										_this262.s5 = v68;
  										break;
  									default:
  										if(_this262.s6 == null) {
  											_this262.s6 = new justPath_StoreF6();
  										}
  										_this262.s6.push(v68);
  									}
  									_this262.l++;
  								}
  								_this261.l++;
  							} else {
  								var _this263 = this.store;
  								var v69 = parseFloat(temp10);
  								switch(_this263.l) {
  								case 0:
  									_this263.s0 = v69;
  									break;
  								case 1:
  									_this263.s1 = v69;
  									break;
  								case 2:
  									_this263.s2 = v69;
  									break;
  								case 3:
  									_this263.s3 = v69;
  									break;
  								case 4:
  									_this263.s4 = v69;
  									break;
  								case 5:
  									_this263.s5 = v69;
  									break;
  								default:
  									if(_this263.s6 == null) {
  										_this263.s6 = new justPath_StoreF6();
  									}
  									var _this264 = _this263.s6;
  									switch(_this264.l) {
  									case 0:
  										_this264.s0 = v69;
  										break;
  									case 1:
  										_this264.s1 = v69;
  										break;
  									case 2:
  										_this264.s2 = v69;
  										break;
  									case 3:
  										_this264.s3 = v69;
  										break;
  									case 4:
  										_this264.s4 = v69;
  										break;
  									case 5:
  										_this264.s5 = v69;
  										break;
  									default:
  										if(_this264.s6 == null) {
  											_this264.s6 = new justPath_StoreF6();
  										}
  										_this264.s6.push(v69);
  									}
  									_this264.l++;
  								}
  								_this263.l++;
  							}
  						}
  						temp10 = "-";
  						break;
  					case 46:
  						temp10 += ".";
  						break;
  					case 48:
  						temp10 += "0";
  						break;
  					case 49:
  						temp10 += "1";
  						break;
  					case 50:
  						temp10 += "2";
  						break;
  					case 51:
  						temp10 += "3";
  						break;
  					case 52:
  						temp10 += "4";
  						break;
  					case 53:
  						temp10 += "5";
  						break;
  					case 54:
  						temp10 += "6";
  						break;
  					case 55:
  						temp10 += "7";
  						break;
  					case 56:
  						temp10 += "8";
  						break;
  					case 57:
  						temp10 += "9";
  						break;
  					default:
  						if(temp10 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this265 = this.store;
  								var v70 = parseFloat(temp10);
  								switch(_this265.l) {
  								case 0:
  									_this265.s0 = v70;
  									break;
  								case 1:
  									_this265.s1 = v70;
  									break;
  								case 2:
  									_this265.s2 = v70;
  									break;
  								case 3:
  									_this265.s3 = v70;
  									break;
  								case 4:
  									_this265.s4 = v70;
  									break;
  								case 5:
  									_this265.s5 = v70;
  									break;
  								default:
  									if(_this265.s6 == null) {
  										_this265.s6 = new justPath_StoreF6();
  									}
  									var _this266 = _this265.s6;
  									switch(_this266.l) {
  									case 0:
  										_this266.s0 = v70;
  										break;
  									case 1:
  										_this266.s1 = v70;
  										break;
  									case 2:
  										_this266.s2 = v70;
  										break;
  									case 3:
  										_this266.s3 = v70;
  										break;
  									case 4:
  										_this266.s4 = v70;
  										break;
  									case 5:
  										_this266.s5 = v70;
  										break;
  									default:
  										if(_this266.s6 == null) {
  											_this266.s6 = new justPath_StoreF6();
  										}
  										_this266.s6.push(v70);
  									}
  									_this266.l++;
  								}
  								_this265.l++;
  							} else {
  								var _this267 = this.store;
  								var v71 = parseFloat(temp10);
  								switch(_this267.l) {
  								case 0:
  									_this267.s0 = v71;
  									break;
  								case 1:
  									_this267.s1 = v71;
  									break;
  								case 2:
  									_this267.s2 = v71;
  									break;
  								case 3:
  									_this267.s3 = v71;
  									break;
  								case 4:
  									_this267.s4 = v71;
  									break;
  								case 5:
  									_this267.s5 = v71;
  									break;
  								default:
  									if(_this267.s6 == null) {
  										_this267.s6 = new justPath_StoreF6();
  									}
  									var _this268 = _this267.s6;
  									switch(_this268.l) {
  									case 0:
  										_this268.s0 = v71;
  										break;
  									case 1:
  										_this268.s1 = v71;
  										break;
  									case 2:
  										_this268.s2 = v71;
  										break;
  									case 3:
  										_this268.s3 = v71;
  										break;
  									case 4:
  										_this268.s4 = v71;
  										break;
  									case 5:
  										_this268.s5 = v71;
  										break;
  									default:
  										if(_this268.s6 == null) {
  											_this268.s6 = new justPath_StoreF6();
  										}
  										_this268.s6.push(v71);
  									}
  									_this268.l++;
  								}
  								_this267.l++;
  							}
  							temp10 = "";
  						}
  						this.pos--;
  						exit10 = true;
  					}
  					if(exit10) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 4) {
  					var firstX3 = this.store.s0 + this.lastX;
  					var firstY3 = this.store.s1 + this.lastY;
  					this.controlX = this.store.s2 + this.lastX;
  					this.controlY = this.store.s3 + this.lastY;
  					this.lastX = this.store.s4 + this.lastX;
  					this.lastY = this.store.s5 + this.lastY;
  					this.pathContext.curveTo(firstX3,firstY3,this.controlX,this.controlY,this.lastX,this.lastY);
  				} else if(this.store.l > 4) {
  					while(this.store.l > 3) {
  						var _this269 = this.store;
  						var out114 = _this269.s0;
  						if(_this269.l != 0) {
  							_this269.s0 = _this269.s1;
  							_this269.s1 = _this269.s2;
  							_this269.s2 = _this269.s3;
  							_this269.s3 = _this269.s4;
  							_this269.s4 = _this269.s5;
  							_this269.s5 = null;
  							if(_this269.s6 != null) {
  								var _this270 = _this269.s6;
  								var out115 = _this270.s0;
  								if(_this270.l != 0) {
  									_this270.s0 = _this270.s1;
  									_this270.s1 = _this270.s2;
  									_this270.s2 = _this270.s3;
  									_this270.s3 = _this270.s4;
  									_this270.s4 = _this270.s5;
  									_this270.s5 = null;
  									if(_this270.s6 != null) {
  										_this270.s5 = _this270.s6.shift();
  									}
  									_this270.l--;
  								}
  								_this269.s5 = out115;
  							}
  							_this269.l--;
  						}
  						var firstX4 = out114 + this.lastX;
  						var _this271 = this.store;
  						var out116 = _this271.s0;
  						if(_this271.l != 0) {
  							_this271.s0 = _this271.s1;
  							_this271.s1 = _this271.s2;
  							_this271.s2 = _this271.s3;
  							_this271.s3 = _this271.s4;
  							_this271.s4 = _this271.s5;
  							_this271.s5 = null;
  							if(_this271.s6 != null) {
  								var _this272 = _this271.s6;
  								var out117 = _this272.s0;
  								if(_this272.l != 0) {
  									_this272.s0 = _this272.s1;
  									_this272.s1 = _this272.s2;
  									_this272.s2 = _this272.s3;
  									_this272.s3 = _this272.s4;
  									_this272.s4 = _this272.s5;
  									_this272.s5 = null;
  									if(_this272.s6 != null) {
  										_this272.s5 = _this272.s6.shift();
  									}
  									_this272.l--;
  								}
  								_this271.s5 = out117;
  							}
  							_this271.l--;
  						}
  						var firstY4 = out116 + this.lastY;
  						var _this273 = this.store;
  						var out118 = _this273.s0;
  						if(_this273.l != 0) {
  							_this273.s0 = _this273.s1;
  							_this273.s1 = _this273.s2;
  							_this273.s2 = _this273.s3;
  							_this273.s3 = _this273.s4;
  							_this273.s4 = _this273.s5;
  							_this273.s5 = null;
  							if(_this273.s6 != null) {
  								var _this274 = _this273.s6;
  								var out119 = _this274.s0;
  								if(_this274.l != 0) {
  									_this274.s0 = _this274.s1;
  									_this274.s1 = _this274.s2;
  									_this274.s2 = _this274.s3;
  									_this274.s3 = _this274.s4;
  									_this274.s4 = _this274.s5;
  									_this274.s5 = null;
  									if(_this274.s6 != null) {
  										_this274.s5 = _this274.s6.shift();
  									}
  									_this274.l--;
  								}
  								_this273.s5 = out119;
  							}
  							_this273.l--;
  						}
  						this.controlX = out118 + this.lastX;
  						var _this275 = this.store;
  						var out120 = _this275.s0;
  						if(_this275.l != 0) {
  							_this275.s0 = _this275.s1;
  							_this275.s1 = _this275.s2;
  							_this275.s2 = _this275.s3;
  							_this275.s3 = _this275.s4;
  							_this275.s4 = _this275.s5;
  							_this275.s5 = null;
  							if(_this275.s6 != null) {
  								var _this276 = _this275.s6;
  								var out121 = _this276.s0;
  								if(_this276.l != 0) {
  									_this276.s0 = _this276.s1;
  									_this276.s1 = _this276.s2;
  									_this276.s2 = _this276.s3;
  									_this276.s3 = _this276.s4;
  									_this276.s4 = _this276.s5;
  									_this276.s5 = null;
  									if(_this276.s6 != null) {
  										_this276.s5 = _this276.s6.shift();
  									}
  									_this276.l--;
  								}
  								_this275.s5 = out121;
  							}
  							_this275.l--;
  						}
  						this.controlY = out120 + this.lastY;
  						var _this277 = this.store;
  						var out122 = _this277.s0;
  						if(_this277.l != 0) {
  							_this277.s0 = _this277.s1;
  							_this277.s1 = _this277.s2;
  							_this277.s2 = _this277.s3;
  							_this277.s3 = _this277.s4;
  							_this277.s4 = _this277.s5;
  							_this277.s5 = null;
  							if(_this277.s6 != null) {
  								var _this278 = _this277.s6;
  								var out123 = _this278.s0;
  								if(_this278.l != 0) {
  									_this278.s0 = _this278.s1;
  									_this278.s1 = _this278.s2;
  									_this278.s2 = _this278.s3;
  									_this278.s3 = _this278.s4;
  									_this278.s4 = _this278.s5;
  									_this278.s5 = null;
  									if(_this278.s6 != null) {
  										_this278.s5 = _this278.s6.shift();
  									}
  									_this278.l--;
  								}
  								_this277.s5 = out123;
  							}
  							_this277.l--;
  						}
  						this.lastX = out122 + this.lastX;
  						var _this279 = this.store;
  						var out124 = _this279.s0;
  						if(_this279.l != 0) {
  							_this279.s0 = _this279.s1;
  							_this279.s1 = _this279.s2;
  							_this279.s2 = _this279.s3;
  							_this279.s3 = _this279.s4;
  							_this279.s4 = _this279.s5;
  							_this279.s5 = null;
  							if(_this279.s6 != null) {
  								var _this280 = _this279.s6;
  								var out125 = _this280.s0;
  								if(_this280.l != 0) {
  									_this280.s0 = _this280.s1;
  									_this280.s1 = _this280.s2;
  									_this280.s2 = _this280.s3;
  									_this280.s3 = _this280.s4;
  									_this280.s4 = _this280.s5;
  									_this280.s5 = null;
  									if(_this280.s6 != null) {
  										_this280.s5 = _this280.s6.shift();
  									}
  									_this280.l--;
  								}
  								_this279.s5 = out125;
  							}
  							_this279.l--;
  						}
  						this.lastY = out124 + this.lastY;
  						this.pathContext.curveTo(firstX4,firstY4,this.controlX,this.controlY,this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 104:
  				var process2 = false;
  				if(process2 == null) {
  					process2 = true;
  				}
  				var _this281 = this.store;
  				_this281.l = 0;
  				_this281.s0 = null;
  				_this281.s1 = null;
  				_this281.s2 = null;
  				_this281.s3 = null;
  				_this281.s4 = null;
  				_this281.s5 = null;
  				_this281.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp11 = "";
  				var exit11 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp11 != "") {
  							if(process2) {
  								if((this.store.l & 1) == 0) {
  									var _this282 = this.store;
  									var v72 = parseFloat(temp11);
  									switch(_this282.l) {
  									case 0:
  										_this282.s0 = v72;
  										break;
  									case 1:
  										_this282.s1 = v72;
  										break;
  									case 2:
  										_this282.s2 = v72;
  										break;
  									case 3:
  										_this282.s3 = v72;
  										break;
  									case 4:
  										_this282.s4 = v72;
  										break;
  									case 5:
  										_this282.s5 = v72;
  										break;
  									default:
  										if(_this282.s6 == null) {
  											_this282.s6 = new justPath_StoreF6();
  										}
  										var _this283 = _this282.s6;
  										switch(_this283.l) {
  										case 0:
  											_this283.s0 = v72;
  											break;
  										case 1:
  											_this283.s1 = v72;
  											break;
  										case 2:
  											_this283.s2 = v72;
  											break;
  										case 3:
  											_this283.s3 = v72;
  											break;
  										case 4:
  											_this283.s4 = v72;
  											break;
  										case 5:
  											_this283.s5 = v72;
  											break;
  										default:
  											if(_this283.s6 == null) {
  												_this283.s6 = new justPath_StoreF6();
  											}
  											_this283.s6.push(v72);
  										}
  										_this283.l++;
  									}
  									_this282.l++;
  								} else {
  									var _this284 = this.store;
  									var v73 = parseFloat(temp11);
  									switch(_this284.l) {
  									case 0:
  										_this284.s0 = v73;
  										break;
  									case 1:
  										_this284.s1 = v73;
  										break;
  									case 2:
  										_this284.s2 = v73;
  										break;
  									case 3:
  										_this284.s3 = v73;
  										break;
  									case 4:
  										_this284.s4 = v73;
  										break;
  									case 5:
  										_this284.s5 = v73;
  										break;
  									default:
  										if(_this284.s6 == null) {
  											_this284.s6 = new justPath_StoreF6();
  										}
  										var _this285 = _this284.s6;
  										switch(_this285.l) {
  										case 0:
  											_this285.s0 = v73;
  											break;
  										case 1:
  											_this285.s1 = v73;
  											break;
  										case 2:
  											_this285.s2 = v73;
  											break;
  										case 3:
  											_this285.s3 = v73;
  											break;
  										case 4:
  											_this285.s4 = v73;
  											break;
  										case 5:
  											_this285.s5 = v73;
  											break;
  										default:
  											if(_this285.s6 == null) {
  												_this285.s6 = new justPath_StoreF6();
  											}
  											_this285.s6.push(v73);
  										}
  										_this285.l++;
  									}
  									_this284.l++;
  								}
  							} else {
  								var _this286 = this.store;
  								var v74 = parseFloat(temp11);
  								switch(_this286.l) {
  								case 0:
  									_this286.s0 = v74;
  									break;
  								case 1:
  									_this286.s1 = v74;
  									break;
  								case 2:
  									_this286.s2 = v74;
  									break;
  								case 3:
  									_this286.s3 = v74;
  									break;
  								case 4:
  									_this286.s4 = v74;
  									break;
  								case 5:
  									_this286.s5 = v74;
  									break;
  								default:
  									if(_this286.s6 == null) {
  										_this286.s6 = new justPath_StoreF6();
  									}
  									var _this287 = _this286.s6;
  									switch(_this287.l) {
  									case 0:
  										_this287.s0 = v74;
  										break;
  									case 1:
  										_this287.s1 = v74;
  										break;
  									case 2:
  										_this287.s2 = v74;
  										break;
  									case 3:
  										_this287.s3 = v74;
  										break;
  									case 4:
  										_this287.s4 = v74;
  										break;
  									case 5:
  										_this287.s5 = v74;
  										break;
  									default:
  										if(_this287.s6 == null) {
  											_this287.s6 = new justPath_StoreF6();
  										}
  										_this287.s6.push(v74);
  									}
  									_this287.l++;
  								}
  								_this286.l++;
  							}
  							temp11 = "";
  						}
  						break;
  					case 45:
  						if(temp11 != "") {
  							if(process2) {
  								if((this.store.l & 1) == 0) {
  									var _this288 = this.store;
  									var v75 = parseFloat(temp11);
  									switch(_this288.l) {
  									case 0:
  										_this288.s0 = v75;
  										break;
  									case 1:
  										_this288.s1 = v75;
  										break;
  									case 2:
  										_this288.s2 = v75;
  										break;
  									case 3:
  										_this288.s3 = v75;
  										break;
  									case 4:
  										_this288.s4 = v75;
  										break;
  									case 5:
  										_this288.s5 = v75;
  										break;
  									default:
  										if(_this288.s6 == null) {
  											_this288.s6 = new justPath_StoreF6();
  										}
  										var _this289 = _this288.s6;
  										switch(_this289.l) {
  										case 0:
  											_this289.s0 = v75;
  											break;
  										case 1:
  											_this289.s1 = v75;
  											break;
  										case 2:
  											_this289.s2 = v75;
  											break;
  										case 3:
  											_this289.s3 = v75;
  											break;
  										case 4:
  											_this289.s4 = v75;
  											break;
  										case 5:
  											_this289.s5 = v75;
  											break;
  										default:
  											if(_this289.s6 == null) {
  												_this289.s6 = new justPath_StoreF6();
  											}
  											_this289.s6.push(v75);
  										}
  										_this289.l++;
  									}
  									_this288.l++;
  								} else {
  									var _this290 = this.store;
  									var v76 = parseFloat(temp11);
  									switch(_this290.l) {
  									case 0:
  										_this290.s0 = v76;
  										break;
  									case 1:
  										_this290.s1 = v76;
  										break;
  									case 2:
  										_this290.s2 = v76;
  										break;
  									case 3:
  										_this290.s3 = v76;
  										break;
  									case 4:
  										_this290.s4 = v76;
  										break;
  									case 5:
  										_this290.s5 = v76;
  										break;
  									default:
  										if(_this290.s6 == null) {
  											_this290.s6 = new justPath_StoreF6();
  										}
  										var _this291 = _this290.s6;
  										switch(_this291.l) {
  										case 0:
  											_this291.s0 = v76;
  											break;
  										case 1:
  											_this291.s1 = v76;
  											break;
  										case 2:
  											_this291.s2 = v76;
  											break;
  										case 3:
  											_this291.s3 = v76;
  											break;
  										case 4:
  											_this291.s4 = v76;
  											break;
  										case 5:
  											_this291.s5 = v76;
  											break;
  										default:
  											if(_this291.s6 == null) {
  												_this291.s6 = new justPath_StoreF6();
  											}
  											_this291.s6.push(v76);
  										}
  										_this291.l++;
  									}
  									_this290.l++;
  								}
  							} else {
  								var _this292 = this.store;
  								var v77 = parseFloat(temp11);
  								switch(_this292.l) {
  								case 0:
  									_this292.s0 = v77;
  									break;
  								case 1:
  									_this292.s1 = v77;
  									break;
  								case 2:
  									_this292.s2 = v77;
  									break;
  								case 3:
  									_this292.s3 = v77;
  									break;
  								case 4:
  									_this292.s4 = v77;
  									break;
  								case 5:
  									_this292.s5 = v77;
  									break;
  								default:
  									if(_this292.s6 == null) {
  										_this292.s6 = new justPath_StoreF6();
  									}
  									var _this293 = _this292.s6;
  									switch(_this293.l) {
  									case 0:
  										_this293.s0 = v77;
  										break;
  									case 1:
  										_this293.s1 = v77;
  										break;
  									case 2:
  										_this293.s2 = v77;
  										break;
  									case 3:
  										_this293.s3 = v77;
  										break;
  									case 4:
  										_this293.s4 = v77;
  										break;
  									case 5:
  										_this293.s5 = v77;
  										break;
  									default:
  										if(_this293.s6 == null) {
  											_this293.s6 = new justPath_StoreF6();
  										}
  										_this293.s6.push(v77);
  									}
  									_this293.l++;
  								}
  								_this292.l++;
  							}
  						}
  						temp11 = "-";
  						break;
  					case 46:
  						temp11 += ".";
  						break;
  					case 48:
  						temp11 += "0";
  						break;
  					case 49:
  						temp11 += "1";
  						break;
  					case 50:
  						temp11 += "2";
  						break;
  					case 51:
  						temp11 += "3";
  						break;
  					case 52:
  						temp11 += "4";
  						break;
  					case 53:
  						temp11 += "5";
  						break;
  					case 54:
  						temp11 += "6";
  						break;
  					case 55:
  						temp11 += "7";
  						break;
  					case 56:
  						temp11 += "8";
  						break;
  					case 57:
  						temp11 += "9";
  						break;
  					default:
  						if(temp11 != "") {
  							if(process2) {
  								if((this.store.l & 1) == 0) {
  									var _this294 = this.store;
  									var v78 = parseFloat(temp11);
  									switch(_this294.l) {
  									case 0:
  										_this294.s0 = v78;
  										break;
  									case 1:
  										_this294.s1 = v78;
  										break;
  									case 2:
  										_this294.s2 = v78;
  										break;
  									case 3:
  										_this294.s3 = v78;
  										break;
  									case 4:
  										_this294.s4 = v78;
  										break;
  									case 5:
  										_this294.s5 = v78;
  										break;
  									default:
  										if(_this294.s6 == null) {
  											_this294.s6 = new justPath_StoreF6();
  										}
  										var _this295 = _this294.s6;
  										switch(_this295.l) {
  										case 0:
  											_this295.s0 = v78;
  											break;
  										case 1:
  											_this295.s1 = v78;
  											break;
  										case 2:
  											_this295.s2 = v78;
  											break;
  										case 3:
  											_this295.s3 = v78;
  											break;
  										case 4:
  											_this295.s4 = v78;
  											break;
  										case 5:
  											_this295.s5 = v78;
  											break;
  										default:
  											if(_this295.s6 == null) {
  												_this295.s6 = new justPath_StoreF6();
  											}
  											_this295.s6.push(v78);
  										}
  										_this295.l++;
  									}
  									_this294.l++;
  								} else {
  									var _this296 = this.store;
  									var v79 = parseFloat(temp11);
  									switch(_this296.l) {
  									case 0:
  										_this296.s0 = v79;
  										break;
  									case 1:
  										_this296.s1 = v79;
  										break;
  									case 2:
  										_this296.s2 = v79;
  										break;
  									case 3:
  										_this296.s3 = v79;
  										break;
  									case 4:
  										_this296.s4 = v79;
  										break;
  									case 5:
  										_this296.s5 = v79;
  										break;
  									default:
  										if(_this296.s6 == null) {
  											_this296.s6 = new justPath_StoreF6();
  										}
  										var _this297 = _this296.s6;
  										switch(_this297.l) {
  										case 0:
  											_this297.s0 = v79;
  											break;
  										case 1:
  											_this297.s1 = v79;
  											break;
  										case 2:
  											_this297.s2 = v79;
  											break;
  										case 3:
  											_this297.s3 = v79;
  											break;
  										case 4:
  											_this297.s4 = v79;
  											break;
  										case 5:
  											_this297.s5 = v79;
  											break;
  										default:
  											if(_this297.s6 == null) {
  												_this297.s6 = new justPath_StoreF6();
  											}
  											_this297.s6.push(v79);
  										}
  										_this297.l++;
  									}
  									_this296.l++;
  								}
  							} else {
  								var _this298 = this.store;
  								var v80 = parseFloat(temp11);
  								switch(_this298.l) {
  								case 0:
  									_this298.s0 = v80;
  									break;
  								case 1:
  									_this298.s1 = v80;
  									break;
  								case 2:
  									_this298.s2 = v80;
  									break;
  								case 3:
  									_this298.s3 = v80;
  									break;
  								case 4:
  									_this298.s4 = v80;
  									break;
  								case 5:
  									_this298.s5 = v80;
  									break;
  								default:
  									if(_this298.s6 == null) {
  										_this298.s6 = new justPath_StoreF6();
  									}
  									var _this299 = _this298.s6;
  									switch(_this299.l) {
  									case 0:
  										_this299.s0 = v80;
  										break;
  									case 1:
  										_this299.s1 = v80;
  										break;
  									case 2:
  										_this299.s2 = v80;
  										break;
  									case 3:
  										_this299.s3 = v80;
  										break;
  									case 4:
  										_this299.s4 = v80;
  										break;
  									case 5:
  										_this299.s5 = v80;
  										break;
  									default:
  										if(_this299.s6 == null) {
  											_this299.s6 = new justPath_StoreF6();
  										}
  										_this299.s6.push(v80);
  									}
  									_this299.l++;
  								}
  								_this298.l++;
  							}
  							temp11 = "";
  						}
  						this.pos--;
  						exit11 = true;
  					}
  					if(exit11) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 1) {
  					this.lastX += this.store.s0;
  					this.pathContext.lineTo(this.lastX,this.lastY);
  				} else if(this.store.l > 1) {
  					while(this.store.l > 0) {
  						var tmp = this.lastX;
  						var _this300 = this.store;
  						var out126 = _this300.s0;
  						if(_this300.l != 0) {
  							_this300.s0 = _this300.s1;
  							_this300.s1 = _this300.s2;
  							_this300.s2 = _this300.s3;
  							_this300.s3 = _this300.s4;
  							_this300.s4 = _this300.s5;
  							_this300.s5 = null;
  							if(_this300.s6 != null) {
  								var _this301 = _this300.s6;
  								var out127 = _this301.s0;
  								if(_this301.l != 0) {
  									_this301.s0 = _this301.s1;
  									_this301.s1 = _this301.s2;
  									_this301.s2 = _this301.s3;
  									_this301.s3 = _this301.s4;
  									_this301.s4 = _this301.s5;
  									_this301.s5 = null;
  									if(_this301.s6 != null) {
  										_this301.s5 = _this301.s6.shift();
  									}
  									_this301.l--;
  								}
  								_this300.s5 = out127;
  							}
  							_this300.l--;
  						}
  						this.lastX = tmp + out126;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 108:
  				var _this302 = this.store;
  				_this302.l = 0;
  				_this302.s0 = null;
  				_this302.s1 = null;
  				_this302.s2 = null;
  				_this302.s3 = null;
  				_this302.s4 = null;
  				_this302.s5 = null;
  				_this302.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp12 = "";
  				var exit12 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp12 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this303 = this.store;
  								var v81 = parseFloat(temp12);
  								switch(_this303.l) {
  								case 0:
  									_this303.s0 = v81;
  									break;
  								case 1:
  									_this303.s1 = v81;
  									break;
  								case 2:
  									_this303.s2 = v81;
  									break;
  								case 3:
  									_this303.s3 = v81;
  									break;
  								case 4:
  									_this303.s4 = v81;
  									break;
  								case 5:
  									_this303.s5 = v81;
  									break;
  								default:
  									if(_this303.s6 == null) {
  										_this303.s6 = new justPath_StoreF6();
  									}
  									var _this304 = _this303.s6;
  									switch(_this304.l) {
  									case 0:
  										_this304.s0 = v81;
  										break;
  									case 1:
  										_this304.s1 = v81;
  										break;
  									case 2:
  										_this304.s2 = v81;
  										break;
  									case 3:
  										_this304.s3 = v81;
  										break;
  									case 4:
  										_this304.s4 = v81;
  										break;
  									case 5:
  										_this304.s5 = v81;
  										break;
  									default:
  										if(_this304.s6 == null) {
  											_this304.s6 = new justPath_StoreF6();
  										}
  										_this304.s6.push(v81);
  									}
  									_this304.l++;
  								}
  								_this303.l++;
  							} else {
  								var _this305 = this.store;
  								var v82 = parseFloat(temp12);
  								switch(_this305.l) {
  								case 0:
  									_this305.s0 = v82;
  									break;
  								case 1:
  									_this305.s1 = v82;
  									break;
  								case 2:
  									_this305.s2 = v82;
  									break;
  								case 3:
  									_this305.s3 = v82;
  									break;
  								case 4:
  									_this305.s4 = v82;
  									break;
  								case 5:
  									_this305.s5 = v82;
  									break;
  								default:
  									if(_this305.s6 == null) {
  										_this305.s6 = new justPath_StoreF6();
  									}
  									var _this306 = _this305.s6;
  									switch(_this306.l) {
  									case 0:
  										_this306.s0 = v82;
  										break;
  									case 1:
  										_this306.s1 = v82;
  										break;
  									case 2:
  										_this306.s2 = v82;
  										break;
  									case 3:
  										_this306.s3 = v82;
  										break;
  									case 4:
  										_this306.s4 = v82;
  										break;
  									case 5:
  										_this306.s5 = v82;
  										break;
  									default:
  										if(_this306.s6 == null) {
  											_this306.s6 = new justPath_StoreF6();
  										}
  										_this306.s6.push(v82);
  									}
  									_this306.l++;
  								}
  								_this305.l++;
  							}
  							temp12 = "";
  						}
  						break;
  					case 45:
  						if(temp12 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this307 = this.store;
  								var v83 = parseFloat(temp12);
  								switch(_this307.l) {
  								case 0:
  									_this307.s0 = v83;
  									break;
  								case 1:
  									_this307.s1 = v83;
  									break;
  								case 2:
  									_this307.s2 = v83;
  									break;
  								case 3:
  									_this307.s3 = v83;
  									break;
  								case 4:
  									_this307.s4 = v83;
  									break;
  								case 5:
  									_this307.s5 = v83;
  									break;
  								default:
  									if(_this307.s6 == null) {
  										_this307.s6 = new justPath_StoreF6();
  									}
  									var _this308 = _this307.s6;
  									switch(_this308.l) {
  									case 0:
  										_this308.s0 = v83;
  										break;
  									case 1:
  										_this308.s1 = v83;
  										break;
  									case 2:
  										_this308.s2 = v83;
  										break;
  									case 3:
  										_this308.s3 = v83;
  										break;
  									case 4:
  										_this308.s4 = v83;
  										break;
  									case 5:
  										_this308.s5 = v83;
  										break;
  									default:
  										if(_this308.s6 == null) {
  											_this308.s6 = new justPath_StoreF6();
  										}
  										_this308.s6.push(v83);
  									}
  									_this308.l++;
  								}
  								_this307.l++;
  							} else {
  								var _this309 = this.store;
  								var v84 = parseFloat(temp12);
  								switch(_this309.l) {
  								case 0:
  									_this309.s0 = v84;
  									break;
  								case 1:
  									_this309.s1 = v84;
  									break;
  								case 2:
  									_this309.s2 = v84;
  									break;
  								case 3:
  									_this309.s3 = v84;
  									break;
  								case 4:
  									_this309.s4 = v84;
  									break;
  								case 5:
  									_this309.s5 = v84;
  									break;
  								default:
  									if(_this309.s6 == null) {
  										_this309.s6 = new justPath_StoreF6();
  									}
  									var _this310 = _this309.s6;
  									switch(_this310.l) {
  									case 0:
  										_this310.s0 = v84;
  										break;
  									case 1:
  										_this310.s1 = v84;
  										break;
  									case 2:
  										_this310.s2 = v84;
  										break;
  									case 3:
  										_this310.s3 = v84;
  										break;
  									case 4:
  										_this310.s4 = v84;
  										break;
  									case 5:
  										_this310.s5 = v84;
  										break;
  									default:
  										if(_this310.s6 == null) {
  											_this310.s6 = new justPath_StoreF6();
  										}
  										_this310.s6.push(v84);
  									}
  									_this310.l++;
  								}
  								_this309.l++;
  							}
  						}
  						temp12 = "-";
  						break;
  					case 46:
  						temp12 += ".";
  						break;
  					case 48:
  						temp12 += "0";
  						break;
  					case 49:
  						temp12 += "1";
  						break;
  					case 50:
  						temp12 += "2";
  						break;
  					case 51:
  						temp12 += "3";
  						break;
  					case 52:
  						temp12 += "4";
  						break;
  					case 53:
  						temp12 += "5";
  						break;
  					case 54:
  						temp12 += "6";
  						break;
  					case 55:
  						temp12 += "7";
  						break;
  					case 56:
  						temp12 += "8";
  						break;
  					case 57:
  						temp12 += "9";
  						break;
  					default:
  						if(temp12 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this311 = this.store;
  								var v85 = parseFloat(temp12);
  								switch(_this311.l) {
  								case 0:
  									_this311.s0 = v85;
  									break;
  								case 1:
  									_this311.s1 = v85;
  									break;
  								case 2:
  									_this311.s2 = v85;
  									break;
  								case 3:
  									_this311.s3 = v85;
  									break;
  								case 4:
  									_this311.s4 = v85;
  									break;
  								case 5:
  									_this311.s5 = v85;
  									break;
  								default:
  									if(_this311.s6 == null) {
  										_this311.s6 = new justPath_StoreF6();
  									}
  									var _this312 = _this311.s6;
  									switch(_this312.l) {
  									case 0:
  										_this312.s0 = v85;
  										break;
  									case 1:
  										_this312.s1 = v85;
  										break;
  									case 2:
  										_this312.s2 = v85;
  										break;
  									case 3:
  										_this312.s3 = v85;
  										break;
  									case 4:
  										_this312.s4 = v85;
  										break;
  									case 5:
  										_this312.s5 = v85;
  										break;
  									default:
  										if(_this312.s6 == null) {
  											_this312.s6 = new justPath_StoreF6();
  										}
  										_this312.s6.push(v85);
  									}
  									_this312.l++;
  								}
  								_this311.l++;
  							} else {
  								var _this313 = this.store;
  								var v86 = parseFloat(temp12);
  								switch(_this313.l) {
  								case 0:
  									_this313.s0 = v86;
  									break;
  								case 1:
  									_this313.s1 = v86;
  									break;
  								case 2:
  									_this313.s2 = v86;
  									break;
  								case 3:
  									_this313.s3 = v86;
  									break;
  								case 4:
  									_this313.s4 = v86;
  									break;
  								case 5:
  									_this313.s5 = v86;
  									break;
  								default:
  									if(_this313.s6 == null) {
  										_this313.s6 = new justPath_StoreF6();
  									}
  									var _this314 = _this313.s6;
  									switch(_this314.l) {
  									case 0:
  										_this314.s0 = v86;
  										break;
  									case 1:
  										_this314.s1 = v86;
  										break;
  									case 2:
  										_this314.s2 = v86;
  										break;
  									case 3:
  										_this314.s3 = v86;
  										break;
  									case 4:
  										_this314.s4 = v86;
  										break;
  									case 5:
  										_this314.s5 = v86;
  										break;
  									default:
  										if(_this314.s6 == null) {
  											_this314.s6 = new justPath_StoreF6();
  										}
  										_this314.s6.push(v86);
  									}
  									_this314.l++;
  								}
  								_this313.l++;
  							}
  							temp12 = "";
  						}
  						this.pos--;
  						exit12 = true;
  					}
  					if(exit12) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 2) {
  					this.lastX = this.store.s0 + this.lastX;
  					this.lastY = this.store.s1 + this.lastY;
  					this.pathContext.lineTo(this.lastX,this.lastY);
  				} else if(this.store.l > 2) {
  					while(this.store.l > 2) {
  						var _this315 = this.store;
  						var out128 = _this315.s0;
  						if(_this315.l != 0) {
  							_this315.s0 = _this315.s1;
  							_this315.s1 = _this315.s2;
  							_this315.s2 = _this315.s3;
  							_this315.s3 = _this315.s4;
  							_this315.s4 = _this315.s5;
  							_this315.s5 = null;
  							if(_this315.s6 != null) {
  								var _this316 = _this315.s6;
  								var out129 = _this316.s0;
  								if(_this316.l != 0) {
  									_this316.s0 = _this316.s1;
  									_this316.s1 = _this316.s2;
  									_this316.s2 = _this316.s3;
  									_this316.s3 = _this316.s4;
  									_this316.s4 = _this316.s5;
  									_this316.s5 = null;
  									if(_this316.s6 != null) {
  										_this316.s5 = _this316.s6.shift();
  									}
  									_this316.l--;
  								}
  								_this315.s5 = out129;
  							}
  							_this315.l--;
  						}
  						this.lastX = out128 + this.lastX;
  						var _this317 = this.store;
  						var out130 = _this317.s0;
  						if(_this317.l != 0) {
  							_this317.s0 = _this317.s1;
  							_this317.s1 = _this317.s2;
  							_this317.s2 = _this317.s3;
  							_this317.s3 = _this317.s4;
  							_this317.s4 = _this317.s5;
  							_this317.s5 = null;
  							if(_this317.s6 != null) {
  								var _this318 = _this317.s6;
  								var out131 = _this318.s0;
  								if(_this318.l != 0) {
  									_this318.s0 = _this318.s1;
  									_this318.s1 = _this318.s2;
  									_this318.s2 = _this318.s3;
  									_this318.s3 = _this318.s4;
  									_this318.s4 = _this318.s5;
  									_this318.s5 = null;
  									if(_this318.s6 != null) {
  										_this318.s5 = _this318.s6.shift();
  									}
  									_this318.l--;
  								}
  								_this317.s5 = out131;
  							}
  							_this317.l--;
  						}
  						this.lastY = out130 + this.lastY;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 109:
  				var _this319 = this.store;
  				_this319.l = 0;
  				_this319.s0 = null;
  				_this319.s1 = null;
  				_this319.s2 = null;
  				_this319.s3 = null;
  				_this319.s4 = null;
  				_this319.s5 = null;
  				_this319.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp13 = "";
  				var exit13 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp13 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this320 = this.store;
  								var v87 = parseFloat(temp13);
  								switch(_this320.l) {
  								case 0:
  									_this320.s0 = v87;
  									break;
  								case 1:
  									_this320.s1 = v87;
  									break;
  								case 2:
  									_this320.s2 = v87;
  									break;
  								case 3:
  									_this320.s3 = v87;
  									break;
  								case 4:
  									_this320.s4 = v87;
  									break;
  								case 5:
  									_this320.s5 = v87;
  									break;
  								default:
  									if(_this320.s6 == null) {
  										_this320.s6 = new justPath_StoreF6();
  									}
  									var _this321 = _this320.s6;
  									switch(_this321.l) {
  									case 0:
  										_this321.s0 = v87;
  										break;
  									case 1:
  										_this321.s1 = v87;
  										break;
  									case 2:
  										_this321.s2 = v87;
  										break;
  									case 3:
  										_this321.s3 = v87;
  										break;
  									case 4:
  										_this321.s4 = v87;
  										break;
  									case 5:
  										_this321.s5 = v87;
  										break;
  									default:
  										if(_this321.s6 == null) {
  											_this321.s6 = new justPath_StoreF6();
  										}
  										_this321.s6.push(v87);
  									}
  									_this321.l++;
  								}
  								_this320.l++;
  							} else {
  								var _this322 = this.store;
  								var v88 = parseFloat(temp13);
  								switch(_this322.l) {
  								case 0:
  									_this322.s0 = v88;
  									break;
  								case 1:
  									_this322.s1 = v88;
  									break;
  								case 2:
  									_this322.s2 = v88;
  									break;
  								case 3:
  									_this322.s3 = v88;
  									break;
  								case 4:
  									_this322.s4 = v88;
  									break;
  								case 5:
  									_this322.s5 = v88;
  									break;
  								default:
  									if(_this322.s6 == null) {
  										_this322.s6 = new justPath_StoreF6();
  									}
  									var _this323 = _this322.s6;
  									switch(_this323.l) {
  									case 0:
  										_this323.s0 = v88;
  										break;
  									case 1:
  										_this323.s1 = v88;
  										break;
  									case 2:
  										_this323.s2 = v88;
  										break;
  									case 3:
  										_this323.s3 = v88;
  										break;
  									case 4:
  										_this323.s4 = v88;
  										break;
  									case 5:
  										_this323.s5 = v88;
  										break;
  									default:
  										if(_this323.s6 == null) {
  											_this323.s6 = new justPath_StoreF6();
  										}
  										_this323.s6.push(v88);
  									}
  									_this323.l++;
  								}
  								_this322.l++;
  							}
  							temp13 = "";
  						}
  						break;
  					case 45:
  						if(temp13 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this324 = this.store;
  								var v89 = parseFloat(temp13);
  								switch(_this324.l) {
  								case 0:
  									_this324.s0 = v89;
  									break;
  								case 1:
  									_this324.s1 = v89;
  									break;
  								case 2:
  									_this324.s2 = v89;
  									break;
  								case 3:
  									_this324.s3 = v89;
  									break;
  								case 4:
  									_this324.s4 = v89;
  									break;
  								case 5:
  									_this324.s5 = v89;
  									break;
  								default:
  									if(_this324.s6 == null) {
  										_this324.s6 = new justPath_StoreF6();
  									}
  									var _this325 = _this324.s6;
  									switch(_this325.l) {
  									case 0:
  										_this325.s0 = v89;
  										break;
  									case 1:
  										_this325.s1 = v89;
  										break;
  									case 2:
  										_this325.s2 = v89;
  										break;
  									case 3:
  										_this325.s3 = v89;
  										break;
  									case 4:
  										_this325.s4 = v89;
  										break;
  									case 5:
  										_this325.s5 = v89;
  										break;
  									default:
  										if(_this325.s6 == null) {
  											_this325.s6 = new justPath_StoreF6();
  										}
  										_this325.s6.push(v89);
  									}
  									_this325.l++;
  								}
  								_this324.l++;
  							} else {
  								var _this326 = this.store;
  								var v90 = parseFloat(temp13);
  								switch(_this326.l) {
  								case 0:
  									_this326.s0 = v90;
  									break;
  								case 1:
  									_this326.s1 = v90;
  									break;
  								case 2:
  									_this326.s2 = v90;
  									break;
  								case 3:
  									_this326.s3 = v90;
  									break;
  								case 4:
  									_this326.s4 = v90;
  									break;
  								case 5:
  									_this326.s5 = v90;
  									break;
  								default:
  									if(_this326.s6 == null) {
  										_this326.s6 = new justPath_StoreF6();
  									}
  									var _this327 = _this326.s6;
  									switch(_this327.l) {
  									case 0:
  										_this327.s0 = v90;
  										break;
  									case 1:
  										_this327.s1 = v90;
  										break;
  									case 2:
  										_this327.s2 = v90;
  										break;
  									case 3:
  										_this327.s3 = v90;
  										break;
  									case 4:
  										_this327.s4 = v90;
  										break;
  									case 5:
  										_this327.s5 = v90;
  										break;
  									default:
  										if(_this327.s6 == null) {
  											_this327.s6 = new justPath_StoreF6();
  										}
  										_this327.s6.push(v90);
  									}
  									_this327.l++;
  								}
  								_this326.l++;
  							}
  						}
  						temp13 = "-";
  						break;
  					case 46:
  						temp13 += ".";
  						break;
  					case 48:
  						temp13 += "0";
  						break;
  					case 49:
  						temp13 += "1";
  						break;
  					case 50:
  						temp13 += "2";
  						break;
  					case 51:
  						temp13 += "3";
  						break;
  					case 52:
  						temp13 += "4";
  						break;
  					case 53:
  						temp13 += "5";
  						break;
  					case 54:
  						temp13 += "6";
  						break;
  					case 55:
  						temp13 += "7";
  						break;
  					case 56:
  						temp13 += "8";
  						break;
  					case 57:
  						temp13 += "9";
  						break;
  					default:
  						if(temp13 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this328 = this.store;
  								var v91 = parseFloat(temp13);
  								switch(_this328.l) {
  								case 0:
  									_this328.s0 = v91;
  									break;
  								case 1:
  									_this328.s1 = v91;
  									break;
  								case 2:
  									_this328.s2 = v91;
  									break;
  								case 3:
  									_this328.s3 = v91;
  									break;
  								case 4:
  									_this328.s4 = v91;
  									break;
  								case 5:
  									_this328.s5 = v91;
  									break;
  								default:
  									if(_this328.s6 == null) {
  										_this328.s6 = new justPath_StoreF6();
  									}
  									var _this329 = _this328.s6;
  									switch(_this329.l) {
  									case 0:
  										_this329.s0 = v91;
  										break;
  									case 1:
  										_this329.s1 = v91;
  										break;
  									case 2:
  										_this329.s2 = v91;
  										break;
  									case 3:
  										_this329.s3 = v91;
  										break;
  									case 4:
  										_this329.s4 = v91;
  										break;
  									case 5:
  										_this329.s5 = v91;
  										break;
  									default:
  										if(_this329.s6 == null) {
  											_this329.s6 = new justPath_StoreF6();
  										}
  										_this329.s6.push(v91);
  									}
  									_this329.l++;
  								}
  								_this328.l++;
  							} else {
  								var _this330 = this.store;
  								var v92 = parseFloat(temp13);
  								switch(_this330.l) {
  								case 0:
  									_this330.s0 = v92;
  									break;
  								case 1:
  									_this330.s1 = v92;
  									break;
  								case 2:
  									_this330.s2 = v92;
  									break;
  								case 3:
  									_this330.s3 = v92;
  									break;
  								case 4:
  									_this330.s4 = v92;
  									break;
  								case 5:
  									_this330.s5 = v92;
  									break;
  								default:
  									if(_this330.s6 == null) {
  										_this330.s6 = new justPath_StoreF6();
  									}
  									var _this331 = _this330.s6;
  									switch(_this331.l) {
  									case 0:
  										_this331.s0 = v92;
  										break;
  									case 1:
  										_this331.s1 = v92;
  										break;
  									case 2:
  										_this331.s2 = v92;
  										break;
  									case 3:
  										_this331.s3 = v92;
  										break;
  									case 4:
  										_this331.s4 = v92;
  										break;
  									case 5:
  										_this331.s5 = v92;
  										break;
  									default:
  										if(_this331.s6 == null) {
  											_this331.s6 = new justPath_StoreF6();
  										}
  										_this331.s6.push(v92);
  									}
  									_this331.l++;
  								}
  								_this330.l++;
  							}
  							temp13 = "";
  						}
  						this.pos--;
  						exit13 = true;
  					}
  					if(exit13) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 2) {
  					this.lastX = this.store.s0 + this.lastX;
  					this.lastY = this.store.s1 + this.lastY;
  					this.pathContext.moveTo(this.lastX,this.lastY);
  				} else if(this.store.l > 2) {
  					var _this332 = this.store;
  					var out132 = _this332.s0;
  					if(_this332.l != 0) {
  						_this332.s0 = _this332.s1;
  						_this332.s1 = _this332.s2;
  						_this332.s2 = _this332.s3;
  						_this332.s3 = _this332.s4;
  						_this332.s4 = _this332.s5;
  						_this332.s5 = null;
  						if(_this332.s6 != null) {
  							var _this333 = _this332.s6;
  							var out133 = _this333.s0;
  							if(_this333.l != 0) {
  								_this333.s0 = _this333.s1;
  								_this333.s1 = _this333.s2;
  								_this333.s2 = _this333.s3;
  								_this333.s3 = _this333.s4;
  								_this333.s4 = _this333.s5;
  								_this333.s5 = null;
  								if(_this333.s6 != null) {
  									_this333.s5 = _this333.s6.shift();
  								}
  								_this333.l--;
  							}
  							_this332.s5 = out133;
  						}
  						_this332.l--;
  					}
  					this.lastX = out132 + this.lastX;
  					var _this334 = this.store;
  					var out134 = _this334.s0;
  					if(_this334.l != 0) {
  						_this334.s0 = _this334.s1;
  						_this334.s1 = _this334.s2;
  						_this334.s2 = _this334.s3;
  						_this334.s3 = _this334.s4;
  						_this334.s4 = _this334.s5;
  						_this334.s5 = null;
  						if(_this334.s6 != null) {
  							var _this335 = _this334.s6;
  							var out135 = _this335.s0;
  							if(_this335.l != 0) {
  								_this335.s0 = _this335.s1;
  								_this335.s1 = _this335.s2;
  								_this335.s2 = _this335.s3;
  								_this335.s3 = _this335.s4;
  								_this335.s4 = _this335.s5;
  								_this335.s5 = null;
  								if(_this335.s6 != null) {
  									_this335.s5 = _this335.s6.shift();
  								}
  								_this335.l--;
  							}
  							_this334.s5 = out135;
  						}
  						_this334.l--;
  					}
  					this.lastY = out134 + this.lastY;
  					this.pathContext.moveTo(this.lastX,this.lastY);
  					while(this.store.l > 1) {
  						var _this336 = this.store;
  						var out136 = _this336.s0;
  						if(_this336.l != 0) {
  							_this336.s0 = _this336.s1;
  							_this336.s1 = _this336.s2;
  							_this336.s2 = _this336.s3;
  							_this336.s3 = _this336.s4;
  							_this336.s4 = _this336.s5;
  							_this336.s5 = null;
  							if(_this336.s6 != null) {
  								var _this337 = _this336.s6;
  								var out137 = _this337.s0;
  								if(_this337.l != 0) {
  									_this337.s0 = _this337.s1;
  									_this337.s1 = _this337.s2;
  									_this337.s2 = _this337.s3;
  									_this337.s3 = _this337.s4;
  									_this337.s4 = _this337.s5;
  									_this337.s5 = null;
  									if(_this337.s6 != null) {
  										_this337.s5 = _this337.s6.shift();
  									}
  									_this337.l--;
  								}
  								_this336.s5 = out137;
  							}
  							_this336.l--;
  						}
  						this.lastX = out136 + this.lastX;
  						var _this338 = this.store;
  						var out138 = _this338.s0;
  						if(_this338.l != 0) {
  							_this338.s0 = _this338.s1;
  							_this338.s1 = _this338.s2;
  							_this338.s2 = _this338.s3;
  							_this338.s3 = _this338.s4;
  							_this338.s4 = _this338.s5;
  							_this338.s5 = null;
  							if(_this338.s6 != null) {
  								var _this339 = _this338.s6;
  								var out139 = _this339.s0;
  								if(_this339.l != 0) {
  									_this339.s0 = _this339.s1;
  									_this339.s1 = _this339.s2;
  									_this339.s2 = _this339.s3;
  									_this339.s3 = _this339.s4;
  									_this339.s4 = _this339.s5;
  									_this339.s5 = null;
  									if(_this339.s6 != null) {
  										_this339.s5 = _this339.s6.shift();
  									}
  									_this339.l--;
  								}
  								_this338.s5 = out139;
  							}
  							_this338.l--;
  						}
  						this.lastY = out138 + this.lastY;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 113:
  				var _this340 = this.store;
  				_this340.l = 0;
  				_this340.s0 = null;
  				_this340.s1 = null;
  				_this340.s2 = null;
  				_this340.s3 = null;
  				_this340.s4 = null;
  				_this340.s5 = null;
  				_this340.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp14 = "";
  				var exit14 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp14 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this341 = this.store;
  								var v93 = parseFloat(temp14);
  								switch(_this341.l) {
  								case 0:
  									_this341.s0 = v93;
  									break;
  								case 1:
  									_this341.s1 = v93;
  									break;
  								case 2:
  									_this341.s2 = v93;
  									break;
  								case 3:
  									_this341.s3 = v93;
  									break;
  								case 4:
  									_this341.s4 = v93;
  									break;
  								case 5:
  									_this341.s5 = v93;
  									break;
  								default:
  									if(_this341.s6 == null) {
  										_this341.s6 = new justPath_StoreF6();
  									}
  									var _this342 = _this341.s6;
  									switch(_this342.l) {
  									case 0:
  										_this342.s0 = v93;
  										break;
  									case 1:
  										_this342.s1 = v93;
  										break;
  									case 2:
  										_this342.s2 = v93;
  										break;
  									case 3:
  										_this342.s3 = v93;
  										break;
  									case 4:
  										_this342.s4 = v93;
  										break;
  									case 5:
  										_this342.s5 = v93;
  										break;
  									default:
  										if(_this342.s6 == null) {
  											_this342.s6 = new justPath_StoreF6();
  										}
  										_this342.s6.push(v93);
  									}
  									_this342.l++;
  								}
  								_this341.l++;
  							} else {
  								var _this343 = this.store;
  								var v94 = parseFloat(temp14);
  								switch(_this343.l) {
  								case 0:
  									_this343.s0 = v94;
  									break;
  								case 1:
  									_this343.s1 = v94;
  									break;
  								case 2:
  									_this343.s2 = v94;
  									break;
  								case 3:
  									_this343.s3 = v94;
  									break;
  								case 4:
  									_this343.s4 = v94;
  									break;
  								case 5:
  									_this343.s5 = v94;
  									break;
  								default:
  									if(_this343.s6 == null) {
  										_this343.s6 = new justPath_StoreF6();
  									}
  									var _this344 = _this343.s6;
  									switch(_this344.l) {
  									case 0:
  										_this344.s0 = v94;
  										break;
  									case 1:
  										_this344.s1 = v94;
  										break;
  									case 2:
  										_this344.s2 = v94;
  										break;
  									case 3:
  										_this344.s3 = v94;
  										break;
  									case 4:
  										_this344.s4 = v94;
  										break;
  									case 5:
  										_this344.s5 = v94;
  										break;
  									default:
  										if(_this344.s6 == null) {
  											_this344.s6 = new justPath_StoreF6();
  										}
  										_this344.s6.push(v94);
  									}
  									_this344.l++;
  								}
  								_this343.l++;
  							}
  							temp14 = "";
  						}
  						break;
  					case 45:
  						if(temp14 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this345 = this.store;
  								var v95 = parseFloat(temp14);
  								switch(_this345.l) {
  								case 0:
  									_this345.s0 = v95;
  									break;
  								case 1:
  									_this345.s1 = v95;
  									break;
  								case 2:
  									_this345.s2 = v95;
  									break;
  								case 3:
  									_this345.s3 = v95;
  									break;
  								case 4:
  									_this345.s4 = v95;
  									break;
  								case 5:
  									_this345.s5 = v95;
  									break;
  								default:
  									if(_this345.s6 == null) {
  										_this345.s6 = new justPath_StoreF6();
  									}
  									var _this346 = _this345.s6;
  									switch(_this346.l) {
  									case 0:
  										_this346.s0 = v95;
  										break;
  									case 1:
  										_this346.s1 = v95;
  										break;
  									case 2:
  										_this346.s2 = v95;
  										break;
  									case 3:
  										_this346.s3 = v95;
  										break;
  									case 4:
  										_this346.s4 = v95;
  										break;
  									case 5:
  										_this346.s5 = v95;
  										break;
  									default:
  										if(_this346.s6 == null) {
  											_this346.s6 = new justPath_StoreF6();
  										}
  										_this346.s6.push(v95);
  									}
  									_this346.l++;
  								}
  								_this345.l++;
  							} else {
  								var _this347 = this.store;
  								var v96 = parseFloat(temp14);
  								switch(_this347.l) {
  								case 0:
  									_this347.s0 = v96;
  									break;
  								case 1:
  									_this347.s1 = v96;
  									break;
  								case 2:
  									_this347.s2 = v96;
  									break;
  								case 3:
  									_this347.s3 = v96;
  									break;
  								case 4:
  									_this347.s4 = v96;
  									break;
  								case 5:
  									_this347.s5 = v96;
  									break;
  								default:
  									if(_this347.s6 == null) {
  										_this347.s6 = new justPath_StoreF6();
  									}
  									var _this348 = _this347.s6;
  									switch(_this348.l) {
  									case 0:
  										_this348.s0 = v96;
  										break;
  									case 1:
  										_this348.s1 = v96;
  										break;
  									case 2:
  										_this348.s2 = v96;
  										break;
  									case 3:
  										_this348.s3 = v96;
  										break;
  									case 4:
  										_this348.s4 = v96;
  										break;
  									case 5:
  										_this348.s5 = v96;
  										break;
  									default:
  										if(_this348.s6 == null) {
  											_this348.s6 = new justPath_StoreF6();
  										}
  										_this348.s6.push(v96);
  									}
  									_this348.l++;
  								}
  								_this347.l++;
  							}
  						}
  						temp14 = "-";
  						break;
  					case 46:
  						temp14 += ".";
  						break;
  					case 48:
  						temp14 += "0";
  						break;
  					case 49:
  						temp14 += "1";
  						break;
  					case 50:
  						temp14 += "2";
  						break;
  					case 51:
  						temp14 += "3";
  						break;
  					case 52:
  						temp14 += "4";
  						break;
  					case 53:
  						temp14 += "5";
  						break;
  					case 54:
  						temp14 += "6";
  						break;
  					case 55:
  						temp14 += "7";
  						break;
  					case 56:
  						temp14 += "8";
  						break;
  					case 57:
  						temp14 += "9";
  						break;
  					default:
  						if(temp14 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this349 = this.store;
  								var v97 = parseFloat(temp14);
  								switch(_this349.l) {
  								case 0:
  									_this349.s0 = v97;
  									break;
  								case 1:
  									_this349.s1 = v97;
  									break;
  								case 2:
  									_this349.s2 = v97;
  									break;
  								case 3:
  									_this349.s3 = v97;
  									break;
  								case 4:
  									_this349.s4 = v97;
  									break;
  								case 5:
  									_this349.s5 = v97;
  									break;
  								default:
  									if(_this349.s6 == null) {
  										_this349.s6 = new justPath_StoreF6();
  									}
  									var _this350 = _this349.s6;
  									switch(_this350.l) {
  									case 0:
  										_this350.s0 = v97;
  										break;
  									case 1:
  										_this350.s1 = v97;
  										break;
  									case 2:
  										_this350.s2 = v97;
  										break;
  									case 3:
  										_this350.s3 = v97;
  										break;
  									case 4:
  										_this350.s4 = v97;
  										break;
  									case 5:
  										_this350.s5 = v97;
  										break;
  									default:
  										if(_this350.s6 == null) {
  											_this350.s6 = new justPath_StoreF6();
  										}
  										_this350.s6.push(v97);
  									}
  									_this350.l++;
  								}
  								_this349.l++;
  							} else {
  								var _this351 = this.store;
  								var v98 = parseFloat(temp14);
  								switch(_this351.l) {
  								case 0:
  									_this351.s0 = v98;
  									break;
  								case 1:
  									_this351.s1 = v98;
  									break;
  								case 2:
  									_this351.s2 = v98;
  									break;
  								case 3:
  									_this351.s3 = v98;
  									break;
  								case 4:
  									_this351.s4 = v98;
  									break;
  								case 5:
  									_this351.s5 = v98;
  									break;
  								default:
  									if(_this351.s6 == null) {
  										_this351.s6 = new justPath_StoreF6();
  									}
  									var _this352 = _this351.s6;
  									switch(_this352.l) {
  									case 0:
  										_this352.s0 = v98;
  										break;
  									case 1:
  										_this352.s1 = v98;
  										break;
  									case 2:
  										_this352.s2 = v98;
  										break;
  									case 3:
  										_this352.s3 = v98;
  										break;
  									case 4:
  										_this352.s4 = v98;
  										break;
  									case 5:
  										_this352.s5 = v98;
  										break;
  									default:
  										if(_this352.s6 == null) {
  											_this352.s6 = new justPath_StoreF6();
  										}
  										_this352.s6.push(v98);
  									}
  									_this352.l++;
  								}
  								_this351.l++;
  							}
  							temp14 = "";
  						}
  						this.pos--;
  						exit14 = true;
  					}
  					if(exit14) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 4) {
  					this.controlX = this.lastX + this.store.s0;
  					this.controlY = this.lastY + this.store.s1;
  					this.lastX = this.store.s0 + this.lastX;
  					this.lastY = this.store.s1 + this.lastY;
  					this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  				} else if(this.store.l > 4) {
  					while(this.store.l > 3) {
  						var tmp1 = this.lastX;
  						var _this353 = this.store;
  						var out140 = _this353.s0;
  						if(_this353.l != 0) {
  							_this353.s0 = _this353.s1;
  							_this353.s1 = _this353.s2;
  							_this353.s2 = _this353.s3;
  							_this353.s3 = _this353.s4;
  							_this353.s4 = _this353.s5;
  							_this353.s5 = null;
  							if(_this353.s6 != null) {
  								var _this354 = _this353.s6;
  								var out141 = _this354.s0;
  								if(_this354.l != 0) {
  									_this354.s0 = _this354.s1;
  									_this354.s1 = _this354.s2;
  									_this354.s2 = _this354.s3;
  									_this354.s3 = _this354.s4;
  									_this354.s4 = _this354.s5;
  									_this354.s5 = null;
  									if(_this354.s6 != null) {
  										_this354.s5 = _this354.s6.shift();
  									}
  									_this354.l--;
  								}
  								_this353.s5 = out141;
  							}
  							_this353.l--;
  						}
  						this.controlX = tmp1 + out140;
  						var tmp2 = this.lastY;
  						var _this355 = this.store;
  						var out142 = _this355.s0;
  						if(_this355.l != 0) {
  							_this355.s0 = _this355.s1;
  							_this355.s1 = _this355.s2;
  							_this355.s2 = _this355.s3;
  							_this355.s3 = _this355.s4;
  							_this355.s4 = _this355.s5;
  							_this355.s5 = null;
  							if(_this355.s6 != null) {
  								var _this356 = _this355.s6;
  								var out143 = _this356.s0;
  								if(_this356.l != 0) {
  									_this356.s0 = _this356.s1;
  									_this356.s1 = _this356.s2;
  									_this356.s2 = _this356.s3;
  									_this356.s3 = _this356.s4;
  									_this356.s4 = _this356.s5;
  									_this356.s5 = null;
  									if(_this356.s6 != null) {
  										_this356.s5 = _this356.s6.shift();
  									}
  									_this356.l--;
  								}
  								_this355.s5 = out143;
  							}
  							_this355.l--;
  						}
  						this.controlY = tmp2 + out142;
  						var _this357 = this.store;
  						var out144 = _this357.s0;
  						if(_this357.l != 0) {
  							_this357.s0 = _this357.s1;
  							_this357.s1 = _this357.s2;
  							_this357.s2 = _this357.s3;
  							_this357.s3 = _this357.s4;
  							_this357.s4 = _this357.s5;
  							_this357.s5 = null;
  							if(_this357.s6 != null) {
  								var _this358 = _this357.s6;
  								var out145 = _this358.s0;
  								if(_this358.l != 0) {
  									_this358.s0 = _this358.s1;
  									_this358.s1 = _this358.s2;
  									_this358.s2 = _this358.s3;
  									_this358.s3 = _this358.s4;
  									_this358.s4 = _this358.s5;
  									_this358.s5 = null;
  									if(_this358.s6 != null) {
  										_this358.s5 = _this358.s6.shift();
  									}
  									_this358.l--;
  								}
  								_this357.s5 = out145;
  							}
  							_this357.l--;
  						}
  						this.lastX = out144 + this.lastX;
  						var _this359 = this.store;
  						var out146 = _this359.s0;
  						if(_this359.l != 0) {
  							_this359.s0 = _this359.s1;
  							_this359.s1 = _this359.s2;
  							_this359.s2 = _this359.s3;
  							_this359.s3 = _this359.s4;
  							_this359.s4 = _this359.s5;
  							_this359.s5 = null;
  							if(_this359.s6 != null) {
  								var _this360 = _this359.s6;
  								var out147 = _this360.s0;
  								if(_this360.l != 0) {
  									_this360.s0 = _this360.s1;
  									_this360.s1 = _this360.s2;
  									_this360.s2 = _this360.s3;
  									_this360.s3 = _this360.s4;
  									_this360.s4 = _this360.s5;
  									_this360.s5 = null;
  									if(_this360.s6 != null) {
  										_this360.s5 = _this360.s6.shift();
  									}
  									_this360.l--;
  								}
  								_this359.s5 = out147;
  							}
  							_this359.l--;
  						}
  						this.lastY = out146 + this.lastY;
  						this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 115:
  				var _this361 = this.store;
  				_this361.l = 0;
  				_this361.s0 = null;
  				_this361.s1 = null;
  				_this361.s2 = null;
  				_this361.s3 = null;
  				_this361.s4 = null;
  				_this361.s5 = null;
  				_this361.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp15 = "";
  				var exit15 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp15 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this362 = this.store;
  								var v99 = parseFloat(temp15);
  								switch(_this362.l) {
  								case 0:
  									_this362.s0 = v99;
  									break;
  								case 1:
  									_this362.s1 = v99;
  									break;
  								case 2:
  									_this362.s2 = v99;
  									break;
  								case 3:
  									_this362.s3 = v99;
  									break;
  								case 4:
  									_this362.s4 = v99;
  									break;
  								case 5:
  									_this362.s5 = v99;
  									break;
  								default:
  									if(_this362.s6 == null) {
  										_this362.s6 = new justPath_StoreF6();
  									}
  									var _this363 = _this362.s6;
  									switch(_this363.l) {
  									case 0:
  										_this363.s0 = v99;
  										break;
  									case 1:
  										_this363.s1 = v99;
  										break;
  									case 2:
  										_this363.s2 = v99;
  										break;
  									case 3:
  										_this363.s3 = v99;
  										break;
  									case 4:
  										_this363.s4 = v99;
  										break;
  									case 5:
  										_this363.s5 = v99;
  										break;
  									default:
  										if(_this363.s6 == null) {
  											_this363.s6 = new justPath_StoreF6();
  										}
  										_this363.s6.push(v99);
  									}
  									_this363.l++;
  								}
  								_this362.l++;
  							} else {
  								var _this364 = this.store;
  								var v100 = parseFloat(temp15);
  								switch(_this364.l) {
  								case 0:
  									_this364.s0 = v100;
  									break;
  								case 1:
  									_this364.s1 = v100;
  									break;
  								case 2:
  									_this364.s2 = v100;
  									break;
  								case 3:
  									_this364.s3 = v100;
  									break;
  								case 4:
  									_this364.s4 = v100;
  									break;
  								case 5:
  									_this364.s5 = v100;
  									break;
  								default:
  									if(_this364.s6 == null) {
  										_this364.s6 = new justPath_StoreF6();
  									}
  									var _this365 = _this364.s6;
  									switch(_this365.l) {
  									case 0:
  										_this365.s0 = v100;
  										break;
  									case 1:
  										_this365.s1 = v100;
  										break;
  									case 2:
  										_this365.s2 = v100;
  										break;
  									case 3:
  										_this365.s3 = v100;
  										break;
  									case 4:
  										_this365.s4 = v100;
  										break;
  									case 5:
  										_this365.s5 = v100;
  										break;
  									default:
  										if(_this365.s6 == null) {
  											_this365.s6 = new justPath_StoreF6();
  										}
  										_this365.s6.push(v100);
  									}
  									_this365.l++;
  								}
  								_this364.l++;
  							}
  							temp15 = "";
  						}
  						break;
  					case 45:
  						if(temp15 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this366 = this.store;
  								var v101 = parseFloat(temp15);
  								switch(_this366.l) {
  								case 0:
  									_this366.s0 = v101;
  									break;
  								case 1:
  									_this366.s1 = v101;
  									break;
  								case 2:
  									_this366.s2 = v101;
  									break;
  								case 3:
  									_this366.s3 = v101;
  									break;
  								case 4:
  									_this366.s4 = v101;
  									break;
  								case 5:
  									_this366.s5 = v101;
  									break;
  								default:
  									if(_this366.s6 == null) {
  										_this366.s6 = new justPath_StoreF6();
  									}
  									var _this367 = _this366.s6;
  									switch(_this367.l) {
  									case 0:
  										_this367.s0 = v101;
  										break;
  									case 1:
  										_this367.s1 = v101;
  										break;
  									case 2:
  										_this367.s2 = v101;
  										break;
  									case 3:
  										_this367.s3 = v101;
  										break;
  									case 4:
  										_this367.s4 = v101;
  										break;
  									case 5:
  										_this367.s5 = v101;
  										break;
  									default:
  										if(_this367.s6 == null) {
  											_this367.s6 = new justPath_StoreF6();
  										}
  										_this367.s6.push(v101);
  									}
  									_this367.l++;
  								}
  								_this366.l++;
  							} else {
  								var _this368 = this.store;
  								var v102 = parseFloat(temp15);
  								switch(_this368.l) {
  								case 0:
  									_this368.s0 = v102;
  									break;
  								case 1:
  									_this368.s1 = v102;
  									break;
  								case 2:
  									_this368.s2 = v102;
  									break;
  								case 3:
  									_this368.s3 = v102;
  									break;
  								case 4:
  									_this368.s4 = v102;
  									break;
  								case 5:
  									_this368.s5 = v102;
  									break;
  								default:
  									if(_this368.s6 == null) {
  										_this368.s6 = new justPath_StoreF6();
  									}
  									var _this369 = _this368.s6;
  									switch(_this369.l) {
  									case 0:
  										_this369.s0 = v102;
  										break;
  									case 1:
  										_this369.s1 = v102;
  										break;
  									case 2:
  										_this369.s2 = v102;
  										break;
  									case 3:
  										_this369.s3 = v102;
  										break;
  									case 4:
  										_this369.s4 = v102;
  										break;
  									case 5:
  										_this369.s5 = v102;
  										break;
  									default:
  										if(_this369.s6 == null) {
  											_this369.s6 = new justPath_StoreF6();
  										}
  										_this369.s6.push(v102);
  									}
  									_this369.l++;
  								}
  								_this368.l++;
  							}
  						}
  						temp15 = "-";
  						break;
  					case 46:
  						temp15 += ".";
  						break;
  					case 48:
  						temp15 += "0";
  						break;
  					case 49:
  						temp15 += "1";
  						break;
  					case 50:
  						temp15 += "2";
  						break;
  					case 51:
  						temp15 += "3";
  						break;
  					case 52:
  						temp15 += "4";
  						break;
  					case 53:
  						temp15 += "5";
  						break;
  					case 54:
  						temp15 += "6";
  						break;
  					case 55:
  						temp15 += "7";
  						break;
  					case 56:
  						temp15 += "8";
  						break;
  					case 57:
  						temp15 += "9";
  						break;
  					default:
  						if(temp15 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this370 = this.store;
  								var v103 = parseFloat(temp15);
  								switch(_this370.l) {
  								case 0:
  									_this370.s0 = v103;
  									break;
  								case 1:
  									_this370.s1 = v103;
  									break;
  								case 2:
  									_this370.s2 = v103;
  									break;
  								case 3:
  									_this370.s3 = v103;
  									break;
  								case 4:
  									_this370.s4 = v103;
  									break;
  								case 5:
  									_this370.s5 = v103;
  									break;
  								default:
  									if(_this370.s6 == null) {
  										_this370.s6 = new justPath_StoreF6();
  									}
  									var _this371 = _this370.s6;
  									switch(_this371.l) {
  									case 0:
  										_this371.s0 = v103;
  										break;
  									case 1:
  										_this371.s1 = v103;
  										break;
  									case 2:
  										_this371.s2 = v103;
  										break;
  									case 3:
  										_this371.s3 = v103;
  										break;
  									case 4:
  										_this371.s4 = v103;
  										break;
  									case 5:
  										_this371.s5 = v103;
  										break;
  									default:
  										if(_this371.s6 == null) {
  											_this371.s6 = new justPath_StoreF6();
  										}
  										_this371.s6.push(v103);
  									}
  									_this371.l++;
  								}
  								_this370.l++;
  							} else {
  								var _this372 = this.store;
  								var v104 = parseFloat(temp15);
  								switch(_this372.l) {
  								case 0:
  									_this372.s0 = v104;
  									break;
  								case 1:
  									_this372.s1 = v104;
  									break;
  								case 2:
  									_this372.s2 = v104;
  									break;
  								case 3:
  									_this372.s3 = v104;
  									break;
  								case 4:
  									_this372.s4 = v104;
  									break;
  								case 5:
  									_this372.s5 = v104;
  									break;
  								default:
  									if(_this372.s6 == null) {
  										_this372.s6 = new justPath_StoreF6();
  									}
  									var _this373 = _this372.s6;
  									switch(_this373.l) {
  									case 0:
  										_this373.s0 = v104;
  										break;
  									case 1:
  										_this373.s1 = v104;
  										break;
  									case 2:
  										_this373.s2 = v104;
  										break;
  									case 3:
  										_this373.s3 = v104;
  										break;
  									case 4:
  										_this373.s4 = v104;
  										break;
  									case 5:
  										_this373.s5 = v104;
  										break;
  									default:
  										if(_this373.s6 == null) {
  											_this373.s6 = new justPath_StoreF6();
  										}
  										_this373.s6.push(v104);
  									}
  									_this373.l++;
  								}
  								_this372.l++;
  							}
  							temp15 = "";
  						}
  						this.pos--;
  						exit15 = true;
  					}
  					if(exit15) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 4) {
  					var firstX5 = this.store.s0 + this.lastX;
  					var firstY5 = this.store.s1 + this.lastY;
  					this.controlX = 2 * this.lastX - this.controlX;
  					this.controlY = 2 * this.lastY - this.controlY;
  					this.lastX = this.store.s2 + this.lastX;
  					this.lastY = this.store.s3 + this.lastY;
  					this.pathContext.curveTo(this.controlX,this.controlY,firstX5,firstY5,this.lastX,this.lastY);
  					this.controlX = firstX5;
  					this.controlY = firstY5;
  				} else if(this.store.l > 4) {
  					while(this.store.l > 3) {
  						var _this374 = this.store;
  						var out148 = _this374.s0;
  						if(_this374.l != 0) {
  							_this374.s0 = _this374.s1;
  							_this374.s1 = _this374.s2;
  							_this374.s2 = _this374.s3;
  							_this374.s3 = _this374.s4;
  							_this374.s4 = _this374.s5;
  							_this374.s5 = null;
  							if(_this374.s6 != null) {
  								var _this375 = _this374.s6;
  								var out149 = _this375.s0;
  								if(_this375.l != 0) {
  									_this375.s0 = _this375.s1;
  									_this375.s1 = _this375.s2;
  									_this375.s2 = _this375.s3;
  									_this375.s3 = _this375.s4;
  									_this375.s4 = _this375.s5;
  									_this375.s5 = null;
  									if(_this375.s6 != null) {
  										_this375.s5 = _this375.s6.shift();
  									}
  									_this375.l--;
  								}
  								_this374.s5 = out149;
  							}
  							_this374.l--;
  						}
  						var firstX6 = out148 + this.lastX;
  						var _this376 = this.store;
  						var out150 = _this376.s0;
  						if(_this376.l != 0) {
  							_this376.s0 = _this376.s1;
  							_this376.s1 = _this376.s2;
  							_this376.s2 = _this376.s3;
  							_this376.s3 = _this376.s4;
  							_this376.s4 = _this376.s5;
  							_this376.s5 = null;
  							if(_this376.s6 != null) {
  								var _this377 = _this376.s6;
  								var out151 = _this377.s0;
  								if(_this377.l != 0) {
  									_this377.s0 = _this377.s1;
  									_this377.s1 = _this377.s2;
  									_this377.s2 = _this377.s3;
  									_this377.s3 = _this377.s4;
  									_this377.s4 = _this377.s5;
  									_this377.s5 = null;
  									if(_this377.s6 != null) {
  										_this377.s5 = _this377.s6.shift();
  									}
  									_this377.l--;
  								}
  								_this376.s5 = out151;
  							}
  							_this376.l--;
  						}
  						var firstY6 = out150 + this.lastY;
  						this.controlX = 2 * this.lastX - this.controlX;
  						this.controlY = 2 * this.lastY - this.controlY;
  						var _this378 = this.store;
  						var out152 = _this378.s0;
  						if(_this378.l != 0) {
  							_this378.s0 = _this378.s1;
  							_this378.s1 = _this378.s2;
  							_this378.s2 = _this378.s3;
  							_this378.s3 = _this378.s4;
  							_this378.s4 = _this378.s5;
  							_this378.s5 = null;
  							if(_this378.s6 != null) {
  								var _this379 = _this378.s6;
  								var out153 = _this379.s0;
  								if(_this379.l != 0) {
  									_this379.s0 = _this379.s1;
  									_this379.s1 = _this379.s2;
  									_this379.s2 = _this379.s3;
  									_this379.s3 = _this379.s4;
  									_this379.s4 = _this379.s5;
  									_this379.s5 = null;
  									if(_this379.s6 != null) {
  										_this379.s5 = _this379.s6.shift();
  									}
  									_this379.l--;
  								}
  								_this378.s5 = out153;
  							}
  							_this378.l--;
  						}
  						this.lastX = out152 + this.lastX;
  						var _this380 = this.store;
  						var out154 = _this380.s0;
  						if(_this380.l != 0) {
  							_this380.s0 = _this380.s1;
  							_this380.s1 = _this380.s2;
  							_this380.s2 = _this380.s3;
  							_this380.s3 = _this380.s4;
  							_this380.s4 = _this380.s5;
  							_this380.s5 = null;
  							if(_this380.s6 != null) {
  								var _this381 = _this380.s6;
  								var out155 = _this381.s0;
  								if(_this381.l != 0) {
  									_this381.s0 = _this381.s1;
  									_this381.s1 = _this381.s2;
  									_this381.s2 = _this381.s3;
  									_this381.s3 = _this381.s4;
  									_this381.s4 = _this381.s5;
  									_this381.s5 = null;
  									if(_this381.s6 != null) {
  										_this381.s5 = _this381.s6.shift();
  									}
  									_this381.l--;
  								}
  								_this380.s5 = out155;
  							}
  							_this380.l--;
  						}
  						this.lastY = out154 + this.lastY;
  						this.pathContext.curveTo(this.controlX,this.controlY,firstX6,firstY6,this.lastX,this.lastY);
  						this.controlX = firstX6;
  						this.controlY = firstY6;
  					}
  				}
  				break;
  			case 116:
  				var _this382 = this.store;
  				_this382.l = 0;
  				_this382.s0 = null;
  				_this382.s1 = null;
  				_this382.s2 = null;
  				_this382.s3 = null;
  				_this382.s4 = null;
  				_this382.s5 = null;
  				_this382.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp16 = "";
  				var exit16 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp16 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this383 = this.store;
  								var v105 = parseFloat(temp16);
  								switch(_this383.l) {
  								case 0:
  									_this383.s0 = v105;
  									break;
  								case 1:
  									_this383.s1 = v105;
  									break;
  								case 2:
  									_this383.s2 = v105;
  									break;
  								case 3:
  									_this383.s3 = v105;
  									break;
  								case 4:
  									_this383.s4 = v105;
  									break;
  								case 5:
  									_this383.s5 = v105;
  									break;
  								default:
  									if(_this383.s6 == null) {
  										_this383.s6 = new justPath_StoreF6();
  									}
  									var _this384 = _this383.s6;
  									switch(_this384.l) {
  									case 0:
  										_this384.s0 = v105;
  										break;
  									case 1:
  										_this384.s1 = v105;
  										break;
  									case 2:
  										_this384.s2 = v105;
  										break;
  									case 3:
  										_this384.s3 = v105;
  										break;
  									case 4:
  										_this384.s4 = v105;
  										break;
  									case 5:
  										_this384.s5 = v105;
  										break;
  									default:
  										if(_this384.s6 == null) {
  											_this384.s6 = new justPath_StoreF6();
  										}
  										_this384.s6.push(v105);
  									}
  									_this384.l++;
  								}
  								_this383.l++;
  							} else {
  								var _this385 = this.store;
  								var v106 = parseFloat(temp16);
  								switch(_this385.l) {
  								case 0:
  									_this385.s0 = v106;
  									break;
  								case 1:
  									_this385.s1 = v106;
  									break;
  								case 2:
  									_this385.s2 = v106;
  									break;
  								case 3:
  									_this385.s3 = v106;
  									break;
  								case 4:
  									_this385.s4 = v106;
  									break;
  								case 5:
  									_this385.s5 = v106;
  									break;
  								default:
  									if(_this385.s6 == null) {
  										_this385.s6 = new justPath_StoreF6();
  									}
  									var _this386 = _this385.s6;
  									switch(_this386.l) {
  									case 0:
  										_this386.s0 = v106;
  										break;
  									case 1:
  										_this386.s1 = v106;
  										break;
  									case 2:
  										_this386.s2 = v106;
  										break;
  									case 3:
  										_this386.s3 = v106;
  										break;
  									case 4:
  										_this386.s4 = v106;
  										break;
  									case 5:
  										_this386.s5 = v106;
  										break;
  									default:
  										if(_this386.s6 == null) {
  											_this386.s6 = new justPath_StoreF6();
  										}
  										_this386.s6.push(v106);
  									}
  									_this386.l++;
  								}
  								_this385.l++;
  							}
  							temp16 = "";
  						}
  						break;
  					case 45:
  						if(temp16 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this387 = this.store;
  								var v107 = parseFloat(temp16);
  								switch(_this387.l) {
  								case 0:
  									_this387.s0 = v107;
  									break;
  								case 1:
  									_this387.s1 = v107;
  									break;
  								case 2:
  									_this387.s2 = v107;
  									break;
  								case 3:
  									_this387.s3 = v107;
  									break;
  								case 4:
  									_this387.s4 = v107;
  									break;
  								case 5:
  									_this387.s5 = v107;
  									break;
  								default:
  									if(_this387.s6 == null) {
  										_this387.s6 = new justPath_StoreF6();
  									}
  									var _this388 = _this387.s6;
  									switch(_this388.l) {
  									case 0:
  										_this388.s0 = v107;
  										break;
  									case 1:
  										_this388.s1 = v107;
  										break;
  									case 2:
  										_this388.s2 = v107;
  										break;
  									case 3:
  										_this388.s3 = v107;
  										break;
  									case 4:
  										_this388.s4 = v107;
  										break;
  									case 5:
  										_this388.s5 = v107;
  										break;
  									default:
  										if(_this388.s6 == null) {
  											_this388.s6 = new justPath_StoreF6();
  										}
  										_this388.s6.push(v107);
  									}
  									_this388.l++;
  								}
  								_this387.l++;
  							} else {
  								var _this389 = this.store;
  								var v108 = parseFloat(temp16);
  								switch(_this389.l) {
  								case 0:
  									_this389.s0 = v108;
  									break;
  								case 1:
  									_this389.s1 = v108;
  									break;
  								case 2:
  									_this389.s2 = v108;
  									break;
  								case 3:
  									_this389.s3 = v108;
  									break;
  								case 4:
  									_this389.s4 = v108;
  									break;
  								case 5:
  									_this389.s5 = v108;
  									break;
  								default:
  									if(_this389.s6 == null) {
  										_this389.s6 = new justPath_StoreF6();
  									}
  									var _this390 = _this389.s6;
  									switch(_this390.l) {
  									case 0:
  										_this390.s0 = v108;
  										break;
  									case 1:
  										_this390.s1 = v108;
  										break;
  									case 2:
  										_this390.s2 = v108;
  										break;
  									case 3:
  										_this390.s3 = v108;
  										break;
  									case 4:
  										_this390.s4 = v108;
  										break;
  									case 5:
  										_this390.s5 = v108;
  										break;
  									default:
  										if(_this390.s6 == null) {
  											_this390.s6 = new justPath_StoreF6();
  										}
  										_this390.s6.push(v108);
  									}
  									_this390.l++;
  								}
  								_this389.l++;
  							}
  						}
  						temp16 = "-";
  						break;
  					case 46:
  						temp16 += ".";
  						break;
  					case 48:
  						temp16 += "0";
  						break;
  					case 49:
  						temp16 += "1";
  						break;
  					case 50:
  						temp16 += "2";
  						break;
  					case 51:
  						temp16 += "3";
  						break;
  					case 52:
  						temp16 += "4";
  						break;
  					case 53:
  						temp16 += "5";
  						break;
  					case 54:
  						temp16 += "6";
  						break;
  					case 55:
  						temp16 += "7";
  						break;
  					case 56:
  						temp16 += "8";
  						break;
  					case 57:
  						temp16 += "9";
  						break;
  					default:
  						if(temp16 != "") {
  							if((this.store.l & 1) == 0) {
  								var _this391 = this.store;
  								var v109 = parseFloat(temp16);
  								switch(_this391.l) {
  								case 0:
  									_this391.s0 = v109;
  									break;
  								case 1:
  									_this391.s1 = v109;
  									break;
  								case 2:
  									_this391.s2 = v109;
  									break;
  								case 3:
  									_this391.s3 = v109;
  									break;
  								case 4:
  									_this391.s4 = v109;
  									break;
  								case 5:
  									_this391.s5 = v109;
  									break;
  								default:
  									if(_this391.s6 == null) {
  										_this391.s6 = new justPath_StoreF6();
  									}
  									var _this392 = _this391.s6;
  									switch(_this392.l) {
  									case 0:
  										_this392.s0 = v109;
  										break;
  									case 1:
  										_this392.s1 = v109;
  										break;
  									case 2:
  										_this392.s2 = v109;
  										break;
  									case 3:
  										_this392.s3 = v109;
  										break;
  									case 4:
  										_this392.s4 = v109;
  										break;
  									case 5:
  										_this392.s5 = v109;
  										break;
  									default:
  										if(_this392.s6 == null) {
  											_this392.s6 = new justPath_StoreF6();
  										}
  										_this392.s6.push(v109);
  									}
  									_this392.l++;
  								}
  								_this391.l++;
  							} else {
  								var _this393 = this.store;
  								var v110 = parseFloat(temp16);
  								switch(_this393.l) {
  								case 0:
  									_this393.s0 = v110;
  									break;
  								case 1:
  									_this393.s1 = v110;
  									break;
  								case 2:
  									_this393.s2 = v110;
  									break;
  								case 3:
  									_this393.s3 = v110;
  									break;
  								case 4:
  									_this393.s4 = v110;
  									break;
  								case 5:
  									_this393.s5 = v110;
  									break;
  								default:
  									if(_this393.s6 == null) {
  										_this393.s6 = new justPath_StoreF6();
  									}
  									var _this394 = _this393.s6;
  									switch(_this394.l) {
  									case 0:
  										_this394.s0 = v110;
  										break;
  									case 1:
  										_this394.s1 = v110;
  										break;
  									case 2:
  										_this394.s2 = v110;
  										break;
  									case 3:
  										_this394.s3 = v110;
  										break;
  									case 4:
  										_this394.s4 = v110;
  										break;
  									case 5:
  										_this394.s5 = v110;
  										break;
  									default:
  										if(_this394.s6 == null) {
  											_this394.s6 = new justPath_StoreF6();
  										}
  										_this394.s6.push(v110);
  									}
  									_this394.l++;
  								}
  								_this393.l++;
  							}
  							temp16 = "";
  						}
  						this.pos--;
  						exit16 = true;
  					}
  					if(exit16) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 2) {
  					this.controlX = 2 * this.lastX - this.controlX;
  					this.controlY = 2 * this.lastY - this.controlY;
  					this.lastX = this.store.s0 + this.lastY;
  					this.lastY = this.store.s1 + this.lastX;
  					this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  				} else if(this.store.l > 2) {
  					while(this.store.l > 1) {
  						this.controlX = 2 * this.lastX - this.controlX;
  						this.controlY = 2 * this.lastY - this.controlY;
  						var _this395 = this.store;
  						var out156 = _this395.s0;
  						if(_this395.l != 0) {
  							_this395.s0 = _this395.s1;
  							_this395.s1 = _this395.s2;
  							_this395.s2 = _this395.s3;
  							_this395.s3 = _this395.s4;
  							_this395.s4 = _this395.s5;
  							_this395.s5 = null;
  							if(_this395.s6 != null) {
  								var _this396 = _this395.s6;
  								var out157 = _this396.s0;
  								if(_this396.l != 0) {
  									_this396.s0 = _this396.s1;
  									_this396.s1 = _this396.s2;
  									_this396.s2 = _this396.s3;
  									_this396.s3 = _this396.s4;
  									_this396.s4 = _this396.s5;
  									_this396.s5 = null;
  									if(_this396.s6 != null) {
  										_this396.s5 = _this396.s6.shift();
  									}
  									_this396.l--;
  								}
  								_this395.s5 = out157;
  							}
  							_this395.l--;
  						}
  						this.lastX = out156 + this.lastY;
  						var _this397 = this.store;
  						var out158 = _this397.s0;
  						if(_this397.l != 0) {
  							_this397.s0 = _this397.s1;
  							_this397.s1 = _this397.s2;
  							_this397.s2 = _this397.s3;
  							_this397.s3 = _this397.s4;
  							_this397.s4 = _this397.s5;
  							_this397.s5 = null;
  							if(_this397.s6 != null) {
  								var _this398 = _this397.s6;
  								var out159 = _this398.s0;
  								if(_this398.l != 0) {
  									_this398.s0 = _this398.s1;
  									_this398.s1 = _this398.s2;
  									_this398.s2 = _this398.s3;
  									_this398.s3 = _this398.s4;
  									_this398.s4 = _this398.s5;
  									_this398.s5 = null;
  									if(_this398.s6 != null) {
  										_this398.s5 = _this398.s6.shift();
  									}
  									_this398.l--;
  								}
  								_this397.s5 = out159;
  							}
  							_this397.l--;
  						}
  						this.lastY = out158 + this.lastX;
  						this.pathContext.quadTo(this.controlX,this.controlY,this.lastX,this.lastY);
  					}
  				}
  				break;
  			case 118:
  				var process3 = false;
  				if(process3 == null) {
  					process3 = true;
  				}
  				var _this399 = this.store;
  				_this399.l = 0;
  				_this399.s0 = null;
  				_this399.s1 = null;
  				_this399.s2 = null;
  				_this399.s3 = null;
  				_this399.s4 = null;
  				_this399.s5 = null;
  				_this399.s6 = null;
  				this.c = this.str.charCodeAt(this.pos++);
  				var temp17 = "";
  				var exit17 = false;
  				while(true) {
  					switch(this.c) {
  					case 32:case 44:
  						if(temp17 != "") {
  							if(process3) {
  								if((this.store.l & 1) == 0) {
  									var _this400 = this.store;
  									var v111 = parseFloat(temp17);
  									switch(_this400.l) {
  									case 0:
  										_this400.s0 = v111;
  										break;
  									case 1:
  										_this400.s1 = v111;
  										break;
  									case 2:
  										_this400.s2 = v111;
  										break;
  									case 3:
  										_this400.s3 = v111;
  										break;
  									case 4:
  										_this400.s4 = v111;
  										break;
  									case 5:
  										_this400.s5 = v111;
  										break;
  									default:
  										if(_this400.s6 == null) {
  											_this400.s6 = new justPath_StoreF6();
  										}
  										var _this401 = _this400.s6;
  										switch(_this401.l) {
  										case 0:
  											_this401.s0 = v111;
  											break;
  										case 1:
  											_this401.s1 = v111;
  											break;
  										case 2:
  											_this401.s2 = v111;
  											break;
  										case 3:
  											_this401.s3 = v111;
  											break;
  										case 4:
  											_this401.s4 = v111;
  											break;
  										case 5:
  											_this401.s5 = v111;
  											break;
  										default:
  											if(_this401.s6 == null) {
  												_this401.s6 = new justPath_StoreF6();
  											}
  											_this401.s6.push(v111);
  										}
  										_this401.l++;
  									}
  									_this400.l++;
  								} else {
  									var _this402 = this.store;
  									var v112 = parseFloat(temp17);
  									switch(_this402.l) {
  									case 0:
  										_this402.s0 = v112;
  										break;
  									case 1:
  										_this402.s1 = v112;
  										break;
  									case 2:
  										_this402.s2 = v112;
  										break;
  									case 3:
  										_this402.s3 = v112;
  										break;
  									case 4:
  										_this402.s4 = v112;
  										break;
  									case 5:
  										_this402.s5 = v112;
  										break;
  									default:
  										if(_this402.s6 == null) {
  											_this402.s6 = new justPath_StoreF6();
  										}
  										var _this403 = _this402.s6;
  										switch(_this403.l) {
  										case 0:
  											_this403.s0 = v112;
  											break;
  										case 1:
  											_this403.s1 = v112;
  											break;
  										case 2:
  											_this403.s2 = v112;
  											break;
  										case 3:
  											_this403.s3 = v112;
  											break;
  										case 4:
  											_this403.s4 = v112;
  											break;
  										case 5:
  											_this403.s5 = v112;
  											break;
  										default:
  											if(_this403.s6 == null) {
  												_this403.s6 = new justPath_StoreF6();
  											}
  											_this403.s6.push(v112);
  										}
  										_this403.l++;
  									}
  									_this402.l++;
  								}
  							} else {
  								var _this404 = this.store;
  								var v113 = parseFloat(temp17);
  								switch(_this404.l) {
  								case 0:
  									_this404.s0 = v113;
  									break;
  								case 1:
  									_this404.s1 = v113;
  									break;
  								case 2:
  									_this404.s2 = v113;
  									break;
  								case 3:
  									_this404.s3 = v113;
  									break;
  								case 4:
  									_this404.s4 = v113;
  									break;
  								case 5:
  									_this404.s5 = v113;
  									break;
  								default:
  									if(_this404.s6 == null) {
  										_this404.s6 = new justPath_StoreF6();
  									}
  									var _this405 = _this404.s6;
  									switch(_this405.l) {
  									case 0:
  										_this405.s0 = v113;
  										break;
  									case 1:
  										_this405.s1 = v113;
  										break;
  									case 2:
  										_this405.s2 = v113;
  										break;
  									case 3:
  										_this405.s3 = v113;
  										break;
  									case 4:
  										_this405.s4 = v113;
  										break;
  									case 5:
  										_this405.s5 = v113;
  										break;
  									default:
  										if(_this405.s6 == null) {
  											_this405.s6 = new justPath_StoreF6();
  										}
  										_this405.s6.push(v113);
  									}
  									_this405.l++;
  								}
  								_this404.l++;
  							}
  							temp17 = "";
  						}
  						break;
  					case 45:
  						if(temp17 != "") {
  							if(process3) {
  								if((this.store.l & 1) == 0) {
  									var _this406 = this.store;
  									var v114 = parseFloat(temp17);
  									switch(_this406.l) {
  									case 0:
  										_this406.s0 = v114;
  										break;
  									case 1:
  										_this406.s1 = v114;
  										break;
  									case 2:
  										_this406.s2 = v114;
  										break;
  									case 3:
  										_this406.s3 = v114;
  										break;
  									case 4:
  										_this406.s4 = v114;
  										break;
  									case 5:
  										_this406.s5 = v114;
  										break;
  									default:
  										if(_this406.s6 == null) {
  											_this406.s6 = new justPath_StoreF6();
  										}
  										var _this407 = _this406.s6;
  										switch(_this407.l) {
  										case 0:
  											_this407.s0 = v114;
  											break;
  										case 1:
  											_this407.s1 = v114;
  											break;
  										case 2:
  											_this407.s2 = v114;
  											break;
  										case 3:
  											_this407.s3 = v114;
  											break;
  										case 4:
  											_this407.s4 = v114;
  											break;
  										case 5:
  											_this407.s5 = v114;
  											break;
  										default:
  											if(_this407.s6 == null) {
  												_this407.s6 = new justPath_StoreF6();
  											}
  											_this407.s6.push(v114);
  										}
  										_this407.l++;
  									}
  									_this406.l++;
  								} else {
  									var _this408 = this.store;
  									var v115 = parseFloat(temp17);
  									switch(_this408.l) {
  									case 0:
  										_this408.s0 = v115;
  										break;
  									case 1:
  										_this408.s1 = v115;
  										break;
  									case 2:
  										_this408.s2 = v115;
  										break;
  									case 3:
  										_this408.s3 = v115;
  										break;
  									case 4:
  										_this408.s4 = v115;
  										break;
  									case 5:
  										_this408.s5 = v115;
  										break;
  									default:
  										if(_this408.s6 == null) {
  											_this408.s6 = new justPath_StoreF6();
  										}
  										var _this409 = _this408.s6;
  										switch(_this409.l) {
  										case 0:
  											_this409.s0 = v115;
  											break;
  										case 1:
  											_this409.s1 = v115;
  											break;
  										case 2:
  											_this409.s2 = v115;
  											break;
  										case 3:
  											_this409.s3 = v115;
  											break;
  										case 4:
  											_this409.s4 = v115;
  											break;
  										case 5:
  											_this409.s5 = v115;
  											break;
  										default:
  											if(_this409.s6 == null) {
  												_this409.s6 = new justPath_StoreF6();
  											}
  											_this409.s6.push(v115);
  										}
  										_this409.l++;
  									}
  									_this408.l++;
  								}
  							} else {
  								var _this410 = this.store;
  								var v116 = parseFloat(temp17);
  								switch(_this410.l) {
  								case 0:
  									_this410.s0 = v116;
  									break;
  								case 1:
  									_this410.s1 = v116;
  									break;
  								case 2:
  									_this410.s2 = v116;
  									break;
  								case 3:
  									_this410.s3 = v116;
  									break;
  								case 4:
  									_this410.s4 = v116;
  									break;
  								case 5:
  									_this410.s5 = v116;
  									break;
  								default:
  									if(_this410.s6 == null) {
  										_this410.s6 = new justPath_StoreF6();
  									}
  									var _this411 = _this410.s6;
  									switch(_this411.l) {
  									case 0:
  										_this411.s0 = v116;
  										break;
  									case 1:
  										_this411.s1 = v116;
  										break;
  									case 2:
  										_this411.s2 = v116;
  										break;
  									case 3:
  										_this411.s3 = v116;
  										break;
  									case 4:
  										_this411.s4 = v116;
  										break;
  									case 5:
  										_this411.s5 = v116;
  										break;
  									default:
  										if(_this411.s6 == null) {
  											_this411.s6 = new justPath_StoreF6();
  										}
  										_this411.s6.push(v116);
  									}
  									_this411.l++;
  								}
  								_this410.l++;
  							}
  						}
  						temp17 = "-";
  						break;
  					case 46:
  						temp17 += ".";
  						break;
  					case 48:
  						temp17 += "0";
  						break;
  					case 49:
  						temp17 += "1";
  						break;
  					case 50:
  						temp17 += "2";
  						break;
  					case 51:
  						temp17 += "3";
  						break;
  					case 52:
  						temp17 += "4";
  						break;
  					case 53:
  						temp17 += "5";
  						break;
  					case 54:
  						temp17 += "6";
  						break;
  					case 55:
  						temp17 += "7";
  						break;
  					case 56:
  						temp17 += "8";
  						break;
  					case 57:
  						temp17 += "9";
  						break;
  					default:
  						if(temp17 != "") {
  							if(process3) {
  								if((this.store.l & 1) == 0) {
  									var _this412 = this.store;
  									var v117 = parseFloat(temp17);
  									switch(_this412.l) {
  									case 0:
  										_this412.s0 = v117;
  										break;
  									case 1:
  										_this412.s1 = v117;
  										break;
  									case 2:
  										_this412.s2 = v117;
  										break;
  									case 3:
  										_this412.s3 = v117;
  										break;
  									case 4:
  										_this412.s4 = v117;
  										break;
  									case 5:
  										_this412.s5 = v117;
  										break;
  									default:
  										if(_this412.s6 == null) {
  											_this412.s6 = new justPath_StoreF6();
  										}
  										var _this413 = _this412.s6;
  										switch(_this413.l) {
  										case 0:
  											_this413.s0 = v117;
  											break;
  										case 1:
  											_this413.s1 = v117;
  											break;
  										case 2:
  											_this413.s2 = v117;
  											break;
  										case 3:
  											_this413.s3 = v117;
  											break;
  										case 4:
  											_this413.s4 = v117;
  											break;
  										case 5:
  											_this413.s5 = v117;
  											break;
  										default:
  											if(_this413.s6 == null) {
  												_this413.s6 = new justPath_StoreF6();
  											}
  											_this413.s6.push(v117);
  										}
  										_this413.l++;
  									}
  									_this412.l++;
  								} else {
  									var _this414 = this.store;
  									var v118 = parseFloat(temp17);
  									switch(_this414.l) {
  									case 0:
  										_this414.s0 = v118;
  										break;
  									case 1:
  										_this414.s1 = v118;
  										break;
  									case 2:
  										_this414.s2 = v118;
  										break;
  									case 3:
  										_this414.s3 = v118;
  										break;
  									case 4:
  										_this414.s4 = v118;
  										break;
  									case 5:
  										_this414.s5 = v118;
  										break;
  									default:
  										if(_this414.s6 == null) {
  											_this414.s6 = new justPath_StoreF6();
  										}
  										var _this415 = _this414.s6;
  										switch(_this415.l) {
  										case 0:
  											_this415.s0 = v118;
  											break;
  										case 1:
  											_this415.s1 = v118;
  											break;
  										case 2:
  											_this415.s2 = v118;
  											break;
  										case 3:
  											_this415.s3 = v118;
  											break;
  										case 4:
  											_this415.s4 = v118;
  											break;
  										case 5:
  											_this415.s5 = v118;
  											break;
  										default:
  											if(_this415.s6 == null) {
  												_this415.s6 = new justPath_StoreF6();
  											}
  											_this415.s6.push(v118);
  										}
  										_this415.l++;
  									}
  									_this414.l++;
  								}
  							} else {
  								var _this416 = this.store;
  								var v119 = parseFloat(temp17);
  								switch(_this416.l) {
  								case 0:
  									_this416.s0 = v119;
  									break;
  								case 1:
  									_this416.s1 = v119;
  									break;
  								case 2:
  									_this416.s2 = v119;
  									break;
  								case 3:
  									_this416.s3 = v119;
  									break;
  								case 4:
  									_this416.s4 = v119;
  									break;
  								case 5:
  									_this416.s5 = v119;
  									break;
  								default:
  									if(_this416.s6 == null) {
  										_this416.s6 = new justPath_StoreF6();
  									}
  									var _this417 = _this416.s6;
  									switch(_this417.l) {
  									case 0:
  										_this417.s0 = v119;
  										break;
  									case 1:
  										_this417.s1 = v119;
  										break;
  									case 2:
  										_this417.s2 = v119;
  										break;
  									case 3:
  										_this417.s3 = v119;
  										break;
  									case 4:
  										_this417.s4 = v119;
  										break;
  									case 5:
  										_this417.s5 = v119;
  										break;
  									default:
  										if(_this417.s6 == null) {
  											_this417.s6 = new justPath_StoreF6();
  										}
  										_this417.s6.push(v119);
  									}
  									_this417.l++;
  								}
  								_this416.l++;
  							}
  							temp17 = "";
  						}
  						this.pos--;
  						exit17 = true;
  					}
  					if(exit17) {
  						break;
  					}
  					this.c = this.str.charCodeAt(this.pos++);
  				}
  				if(this.store.l == 1) {
  					this.lastY += this.store.s0;
  					this.pathContext.lineTo(this.lastX,this.lastY);
  				} else if(this.store.l > 1) {
  					while(this.store.l > 0) {
  						var tmp3 = this.lastY;
  						var _this418 = this.store;
  						var out160 = _this418.s0;
  						if(_this418.l != 0) {
  							_this418.s0 = _this418.s1;
  							_this418.s1 = _this418.s2;
  							_this418.s2 = _this418.s3;
  							_this418.s3 = _this418.s4;
  							_this418.s4 = _this418.s5;
  							_this418.s5 = null;
  							if(_this418.s6 != null) {
  								var _this419 = _this418.s6;
  								var out161 = _this419.s0;
  								if(_this419.l != 0) {
  									_this419.s0 = _this419.s1;
  									_this419.s1 = _this419.s2;
  									_this419.s2 = _this419.s3;
  									_this419.s3 = _this419.s4;
  									_this419.s4 = _this419.s5;
  									_this419.s5 = null;
  									if(_this419.s6 != null) {
  										_this419.s5 = _this419.s6.shift();
  									}
  									_this419.l--;
  								}
  								_this418.s5 = out161;
  							}
  							_this418.l--;
  						}
  						this.lastY = tmp3 + out160;
  						this.pathContext.lineTo(this.lastX,this.lastY);
  					}
  				}
  				break;
  			default:
  				++count;
  			}
  			this.c = this.str.charCodeAt(this.pos++);
  		}
  		return str_;
  	}
  	,__class__: justPath_SvgPath
  };
  var justPath_transform_TranslationContext = function(pathContext_,dx_,dy_) {
  	this.pathContext = pathContext_;
  	this.dx = dx_;
  	this.dy = dy_;
  };
  justPath_transform_TranslationContext.__name__ = true;
  justPath_transform_TranslationContext.__interfaces__ = [justPath_IPathContext];
  justPath_transform_TranslationContext.prototype = {
  	moveTo: function(x,y) {
  		this.pathContext.moveTo(x + this.dx,y + this.dy);
  	}
  	,lineTo: function(x,y) {
  		this.pathContext.lineTo(x + this.dx,y + this.dy);
  	}
  	,quadTo: function(x1,y1,x2,y2) {
  		this.pathContext.quadTo(x1 + this.dx,y1 + this.dy,x2 + this.dx,y2 + this.dy);
  	}
  	,curveTo: function(x1,y1,x2,y2,x3,y3) {
  		this.pathContext.curveTo(x1 + this.dx,y1 + this.dy,x2 + this.dx,y2 + this.dy,x3 + this.dx,y3 + this.dy);
  	}
  	,__class__: justPath_transform_TranslationContext
  };
  var trilateral3_Trilateral = function() { };
  trilateral3_Trilateral.__name__ = true;
  var trilateral3_drawing_Contour = function(pen_,endLine_) {
  	if(endLine_ == null) {
  		endLine_ = 0;
  	}
  	this.count = 0;
  	this.pointsAnti = [];
  	this.pointsClock = [];
  	this.pen = pen_;
  	this.endLine = endLine_;
  };
  trilateral3_drawing_Contour.__name__ = true;
  trilateral3_drawing_Contour.prototype = {
  	reset: function() {
  		this.angleA = 0;
  		this.count = 0;
  		this.kax = 0;
  		this.kay = 0;
  		this.kbx = 0;
  		this.kby = 0;
  		this.kcx = 0;
  		this.kcy = 0;
  		this.ncx = 0;
  		this.ncy = 0;
  		this.ax = 0;
  		this.ay = 0;
  		this.bx = 0;
  		this.by = 0;
  		this.cx = 0;
  		this.cy = 0;
  		this.dx = null;
  		this.dy = null;
  		this.ex = null;
  		this.ey = null;
  		this.pointsClock.length = 0;
  		this.pointsAnti.length = 0;
  	}
  	,endEdges: function() {
  		var pC = this.pointsClock.length;
  		var pA = this.pointsAnti.length;
  		this.pointsClock[pC++] = this.penultimateCX;
  		this.pointsClock[pC++] = this.penultimateCY;
  		this.pointsClock[pC++] = this.lastClockX;
  		this.pointsClock[pC++] = this.lastClockY;
  		this.pointsAnti[pA++] = this.penultimateAX;
  		this.pointsAnti[pA++] = this.penultimateAY;
  		this.pointsAnti[pA++] = this.lastAntiX;
  		this.pointsAnti[pA++] = this.lastAntiY;
  	}
  	,addQuads: function(clockWise,width_) {
  		var currQuadIndex = this.pen.drawType.get_pos();
  		var pC = 0;
  		var pA = 0;
  		if(clockWise && !this.lastClock) {
  			if(this.count == 1) {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.kax;
  				this.pointsAnti[pA++] = this.kay;
  				this.pointsAnti[pA++] = this.jx;
  				this.pointsAnti[pA++] = this.jy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.kbx;
  				this.pointsClock[pC++] = this.kby;
  				this.pointsClock[pC++] = this.ncx;
  				this.pointsClock[pC++] = this.ncy;
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.kbx,this.kby,0,this.ncx,this.ncy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			} else {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.kax;
  				this.pointsAnti[pA++] = this.kay;
  				this.pointsAnti[pA++] = this.jx;
  				this.pointsAnti[pA++] = this.jy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.jxOld;
  				this.pointsClock[pC++] = this.jyOld;
  				this.pointsClock[pC++] = this.kbx;
  				this.pointsClock[pC++] = this.kby;
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.kbx,this.kby,0,this.jxOld,this.jyOld,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			}
  			var _this = this.pen;
  			var v = this.quadIndex;
  			_this.drawType.set_pos(v);
  			_this.colorType.set_pos(v);
  			var _this = this.pen;
  			var color = -1;
  			if(color == null) {
  				color = -1;
  			}
  			if(color == -1) {
  				color = _this.currentColor;
  			}
  			_this.drawType.triangle(this.kax,this.kay,0,this.kbx,this.kby,0,this.jx,this.jy,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this.drawType.next();
  			_this.colorType.cornerColors(color,color,color);
  		}
  		if(clockWise && this.lastClock) {
  			if(this.count == 1) {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.jx;
  				this.pointsAnti[pA++] = this.jy;
  				this.pointsAnti[pA++] = this.kbx;
  				this.pointsAnti[pA++] = this.kby;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.kax;
  				this.pointsClock[pC++] = this.kay;
  				this.pointsClock[pC++] = this.kbx;
  				this.pointsClock[pC++] = this.kby;
  				var _this = this.pen;
  				var v = this.quadIndex;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.kbx,this.kby,0,this.jx,this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.kbx,this.kby,0,this.ncx,this.ncy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			} else {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.jxOld;
  				this.pointsAnti[pA++] = this.jyOld;
  				this.pointsAnti[pA++] = this.jx;
  				this.pointsAnti[pA++] = this.jy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.ncx;
  				this.pointsClock[pC++] = this.ncy;
  				this.pointsClock[pC++] = this.kbx;
  				this.pointsClock[pC++] = this.kby;
  				var _this = this.pen;
  				var v = this.quadIndex;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.jxOld,this.jyOld,0,this.kbx,this.kby,0,this.jx,this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.jxOld,this.jyOld,0,this.kbx,this.kby,0,this.ncx,this.ncy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			}
  		}
  		if(!clockWise && !this.lastClock) {
  			var _this = this.pen;
  			var v = this.quadIndex;
  			_this.drawType.set_pos(v);
  			_this.colorType.set_pos(v);
  			var _this = this.pen;
  			var color = -1;
  			if(color == null) {
  				color = -1;
  			}
  			if(color == -1) {
  				color = _this.currentColor;
  			}
  			_this.drawType.triangle(this.kax,this.kay,0,this.jx,this.jy,0,this.kcx,this.kcy,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this.drawType.next();
  			_this.colorType.cornerColors(color,color,color);
  			if(this.count == 1) {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.kax;
  				this.pointsAnti[pA++] = this.kay;
  				this.pointsAnti[pA++] = this.kcx;
  				this.pointsAnti[pA++] = this.kcy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.ncx;
  				this.pointsClock[pC++] = this.ncy;
  				this.pointsClock[pC++] = this.jx;
  				this.pointsClock[pC++] = this.jy;
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.jx,this.jy,0,this.ncx,this.ncy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			} else {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.kax;
  				this.pointsAnti[pA++] = this.kay;
  				this.pointsAnti[pA++] = this.kcx;
  				this.pointsAnti[pA++] = this.kcy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.jxOld;
  				this.pointsClock[pC++] = this.jyOld;
  				this.pointsClock[pC++] = this.jx;
  				this.pointsClock[pC++] = this.jy;
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.jx,this.jy,0,this.jxOld,this.jyOld,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			}
  		}
  		if(!clockWise && this.lastClock) {
  			if(this.count == 1) {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.kay;
  				this.pointsAnti[pA++] = this.kax;
  				this.pointsAnti[pA++] = this.kcx;
  				this.pointsAnti[pA++] = this.kcy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.jx;
  				this.pointsClock[pC++] = this.jy;
  				this.pointsClock[pC++] = this.ncx;
  				this.pointsClock[pC++] = this.ncy;
  				var _this = this.pen;
  				var v = this.quadIndex;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.jx,this.jy,0,this.kcx,this.kcy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.kax,this.kay,0,this.jx,this.jy,0,this.ncx,this.ncy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			} else {
  				pA = this.pointsAnti.length;
  				this.pointsAnti[pA++] = this.jxOld;
  				this.pointsAnti[pA++] = this.jyOld;
  				this.pointsAnti[pA++] = this.kcx;
  				this.pointsAnti[pA++] = this.kcy;
  				pC = this.pointsClock.length;
  				this.pointsClock[pC++] = this.jx;
  				this.pointsClock[pC++] = this.jy;
  				this.pointsClock[pC++] = this.ncx;
  				this.pointsClock[pC++] = this.ncy;
  				var _this = this.pen;
  				var v = this.quadIndex;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.jxOld,this.jyOld,0,this.jx,this.jy,0,this.kcx,this.kcy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  				var _this = this.pen;
  				var v = this.quadIndex + 1;
  				_this.drawType.set_pos(v);
  				_this.colorType.set_pos(v);
  				var _this = this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this.currentColor;
  				}
  				_this.drawType.triangle(this.jxOld,this.jyOld,0,this.jx,this.jy,0,this.ncx,this.ncy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this.drawType.next();
  				_this.colorType.cornerColors(color,color,color);
  			}
  		}
  		var _this = this.pen;
  		_this.drawType.set_pos(currQuadIndex);
  		_this.colorType.set_pos(currQuadIndex);
  	}
  	,__class__: trilateral3_drawing_Contour
  };
  var trilateral3_drawing_Pen = function(drawType_,colorType_) {
  	this.currentColor = 16435934;
  	this.drawType = drawType_;
  	this.colorType = colorType_;
  };
  trilateral3_drawing_Pen.__name__ = true;
  trilateral3_drawing_Pen.prototype = {
  	__class__: trilateral3_drawing_Pen
  };
  var trilateral3_drawing_Sketch = function(pen_,sketchForm_,endLine_) {
  	if(endLine_ == null) {
  		endLine_ = 0;
  	}
  	this.width = 0.01;
  	this.y = 0.;
  	this.x = 0.;
  	this.contour = new trilateral3_drawing_Contour(pen_,endLine_);
  	this.pen = pen_;
  	this.endLine = endLine_;
  	this.sketchForm = sketchForm_;
  	switch(sketchForm_) {
  	case 0:
  		this.line = $bind(this,this.tracerLine);
  		break;
  	case 1:
  		this.line = $bind(this,this.baseLine);
  		break;
  	case 2:
  		this.line = $bind(this,this.crudeLine);
  		break;
  	case 3:
  		this.line = $bind(this,this.fillOnlyLine);
  		break;
  	case 4:
  		this.line = $bind(this,this.fineLine);
  		break;
  	case 5:
  		this.line = $bind(this,this.fineOverlapLine);
  		break;
  	case 6:
  		this.line = $bind(this,this.mediumLine);
  		break;
  	case 7:
  		this.line = $bind(this,this.mediumOverlapLine);
  		break;
  	case 8:
  		this.line = $bind(this,this.roundEndLine);
  		break;
  	}
  	this.points = [];
  	this.pointsClock = [];
  	this.pointsAnti = [];
  	this.points[0] = [];
  	this.dim = [];
  };
  trilateral3_drawing_Sketch.__name__ = true;
  trilateral3_drawing_Sketch.__interfaces__ = [justPath_IPathContext];
  trilateral3_drawing_Sketch.prototype = {
  	tracerLine: function(x_,y_) {
  		haxe_Log.trace("lineTo( " + this.x + ", " + this.y + ", " + x_ + ", " + y_ + ", width )",{ fileName : "trilateral3/drawing/Sketch.hx", lineNumber : 27, className : "trilateral3.drawing.Sketch", methodName : "tracerLine"});
  	}
  	,fillOnlyLine: function(x_,y_) {
  	}
  	,baseLine: function(x_,y_) {
  		haxe_Log.trace("lineTo( " + this.x + ", " + this.y + ", " + x_ + ", " + y_ + ", width )",{ fileName : "trilateral3/drawing/Sketch.hx", lineNumber : 27, className : "trilateral3.drawing.Sketch", methodName : "tracerLine"});
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.halfA = Math.PI / 2;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var dxPrev_ = _this.dx;
  		var dyPrev_ = _this.dy;
  		var exPrev_ = _this.ex;
  		var eyPrev_ = _this.ey;
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var _this1 = _this.pen;
  		var color = -1;
  		if(color == null) {
  			color = -1;
  		}
  		if(color == -1) {
  			color = _this1.currentColor;
  		}
  		_this1.drawType.triangle(dxPrev_,dyPrev_,0,_this.dx,_this.dy,0,exPrev_,eyPrev_,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this1.drawType.next();
  		_this1.colorType.cornerColors(color,color,color);
  		var _this1 = _this.pen;
  		var color = -1;
  		if(color == null) {
  			color = -1;
  		}
  		if(color == -1) {
  			color = _this1.currentColor;
  		}
  		_this1.drawType.triangle(dxPrev_,dyPrev_,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this1.drawType.next();
  		_this1.colorType.cornerColors(color,color,color);
  	}
  	,crudeLine: function(x_,y_) {
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.halfA = Math.PI / 2;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var dxPrev_ = _this.dx;
  		var dyPrev_ = _this.dy;
  		var exPrev_ = _this.ex;
  		var eyPrev_ = _this.ey;
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var _this1 = _this.pen;
  		var color = -1;
  		if(color == null) {
  			color = -1;
  		}
  		if(color == -1) {
  			color = _this1.currentColor;
  		}
  		_this1.drawType.triangle(dxPrev_,dyPrev_,0,_this.dx,_this.dy,0,exPrev_,eyPrev_,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this1.drawType.next();
  		_this1.colorType.cornerColors(color,color,color);
  		var _this1 = _this.pen;
  		var color = -1;
  		if(color == null) {
  			color = -1;
  		}
  		if(color == -1) {
  			color = _this1.currentColor;
  		}
  		_this1.drawType.triangle(dxPrev_,dyPrev_,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this1.drawType.next();
  		_this1.colorType.cornerColors(color,color,color);
  	}
  	,roundEndLine: function(x_,y_) {
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		var endLineCurve = 3;
  		if(endLineCurve == null) {
  			endLineCurve = 0;
  		}
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.halfA = Math.PI / 2;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var dxPrev_ = _this.dx;
  		var dyPrev_ = _this.dy;
  		var exPrev_ = _this.ex;
  		var eyPrev_ = _this.ey;
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		switch(endLineCurve) {
  		case 0:
  			break;
  		case 1:
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 + Math.PI;
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif) / step);
  			var step = dif / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = ax_ + radius * Math.sin(angle);
  				cy = ay_ + radius * Math.cos(angle);
  				if(i != 0) {
  					drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = 0;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			break;
  		case 2:
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 - Math.PI;
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif) / step);
  			var step = dif / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = x_ + radius * Math.sin(angle);
  				cy = y_ + radius * Math.cos(angle);
  				if(i != 0) {
  					drawType.triangle(x_,y_,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = 0;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			break;
  		case 3:
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 + Math.PI;
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif) / step);
  			var step = dif / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = ax_ + radius * Math.sin(angle);
  				cy = ay_ + radius * Math.cos(angle);
  				if(i != 0) {
  					drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = 0;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 - Math.PI;
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif1 = clockwise ? theta : -theta;
  				dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif) / step);
  			var step = dif / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = x_ + radius * Math.sin(angle);
  				cy = y_ + radius * Math.cos(angle);
  				if(i != 0) {
  					drawType.triangle(x_,y_,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = 0;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			break;
  		}
  		var _this1 = _this.pen;
  		var color = -1;
  		if(color == null) {
  			color = -1;
  		}
  		if(color == -1) {
  			color = _this1.currentColor;
  		}
  		_this1.drawType.triangle(dxPrev_,dyPrev_,0,_this.dx,_this.dy,0,exPrev_,eyPrev_,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this1.drawType.next();
  		_this1.colorType.cornerColors(color,color,color);
  		var _this1 = _this.pen;
  		var color = -1;
  		if(color == null) {
  			color = -1;
  		}
  		if(color == -1) {
  			color = _this1.currentColor;
  		}
  		_this1.drawType.triangle(dxPrev_,dyPrev_,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this1.drawType.next();
  		_this1.colorType.cornerColors(color,color,color);
  	}
  	,mediumLine: function(x_,y_) {
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		var curveEnds = false;
  		if(curveEnds == null) {
  			curveEnds = false;
  		}
  		var oldAngle = _this.dx != null ? _this.angle1 : null;
  		_this.halfA = Math.PI / 2;
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var x = _this.dxOld - x_;
  		var y = _this.dyOld - y_;
  		var x1 = _this.exOld - x_;
  		var y1 = _this.eyOld - y_;
  		var clockWise = x * x + y * y > x1 * x1 + y1 * y1;
  		var theta0;
  		var theta1;
  		if(clockWise) {
  			theta0 = -Math.atan2(_this.ay - _this.dyOld,_this.ax - _this.dxOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.eyPrev,_this.ax - _this.exPrev) - Math.PI / 2;
  		} else {
  			theta0 = -Math.atan2(_this.ay - _this.eyOld,_this.ax - _this.exOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.dyPrev,_this.ax - _this.dxPrev) - Math.PI / 2;
  		}
  		var dif;
  		switch(fracs_DifferencePreference.SMALL._hx_index) {
  		case 0:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		if(_this.count != 0) {
  			var gamma = Math.abs(dif) / 2;
  			var h = width_ / 2 / Math.cos(gamma);
  			var f;
  			if(theta0 <= Math.PI && theta0 > -Math.PI) {
  				f = theta0;
  			} else {
  				var a = (theta0 + Math.PI) % (2 * Math.PI);
  				f = a >= 0 ? a - Math.PI : a + Math.PI;
  			}
  			var this1 = f;
  			var start = this1;
  			var start2 = start;
  			var delta = start2 + dif / 2 + Math.PI;
  			_this.jx = _this.ax + h * Math.sin(delta);
  			_this.jy = _this.ay + h * Math.cos(delta);
  		}
  		if(_this.count == 0 && (_this.endLine == 1 || _this.endLine == 3)) {
  			var ax = _this.ax;
  			var ay = _this.ay;
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 + Math.PI;
  			var temp = [];
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif1;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 > 0 ? dif2 : 2 * Math.PI + dif2;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 < 0 ? dif2 : -2 * Math.PI + dif2;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = smallest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = largest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif1 >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif1) / step);
  			var step = dif1 / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var p2 = temp.length;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = ax + radius * Math.sin(angle);
  				cy = ay + radius * Math.cos(angle);
  				temp[p2++] = cx;
  				temp[p2++] = cy;
  				if(i != 0) {
  					drawType.triangle(ax,ay,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			var pA = _this.pointsAnti.length;
  			var len = temp.length / 2 | 0;
  			var p4 = temp.length / 4 | 0;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsAnti[pA++] = temp[len - 2 * i + 1];
  				_this.pointsAnti[pA++] = temp[len - 2 * i];
  			}
  			var pC = _this.pointsClock.length;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsClock[pC++] = temp[i * 2 + len + 1];
  				_this.pointsClock[pC++] = temp[i * 2 + len];
  			}
  		}
  		if(_this.count != 0) {
  			_this.addQuads(clockWise,width_);
  		}
  		_this.quadIndex = _this.pen.drawType.get_pos();
  		if(_this.count == 0) {
  			_this.penultimateAX = _this.dxPrev;
  			_this.penultimateAY = _this.dyPrev;
  			_this.lastAntiX = _this.ex;
  			_this.lastAntiY = _this.ey;
  			_this.penultimateCX = _this.dx;
  			_this.penultimateCY = _this.dy;
  			_this.lastClockX = _this.exPrev;
  			_this.lastClockY = _this.eyPrev;
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == null) {
  				color = -1;
  			}
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == null) {
  				color = -1;
  			}
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  		} else {
  			if(clockWise && !_this.lastClock) {
  				_this.penultimateAX = _this.jx;
  				_this.penultimateAY = _this.jy;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.exPrev;
  				_this.lastClockY = _this.eyPrev;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  			if(clockWise && _this.lastClock) {
  				_this.penultimateAX = _this.jx;
  				_this.penultimateAY = _this.jy;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.exPrev;
  				_this.lastClockY = _this.eyPrev;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  			if(!clockWise && !_this.lastClock) {
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.jx;
  				_this.lastClockY = _this.jy;
  				_this.penultimateAX = _this.dxPrev;
  				_this.penultimateAY = _this.dyPrev;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  			if(!clockWise && _this.lastClock) {
  				_this.penultimateAX = _this.dxPrev;
  				_this.penultimateAY = _this.dyPrev;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.jx;
  				_this.penultimateCY = _this.jy;
  				_this.lastClockX = _this.dx;
  				_this.lastClockY = _this.dy;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		if(curveEnds) {
  			if(clockWise) {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsClock;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			} else {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsAnti;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			}
  		} else if(_this.count != 0) {
  			if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxOld,_this.dyOld,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.exOld,_this.eyOld,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.kax = _this.dxPrev;
  		_this.kay = _this.dyPrev;
  		_this.kbx = _this.dx;
  		_this.kby = _this.dy;
  		_this.ncx = _this.exPrev;
  		_this.ncy = _this.eyPrev;
  		_this.kcx = _this.ex;
  		_this.kcy = _this.ey;
  		if(curveEnds && _this.count != 0) {
  			if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxOld,_this.dyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exOld,_this.eyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.jxOld = _this.jx;
  		_this.jyOld = _this.jy;
  		_this.lastClock = clockWise;
  		_this.count++;
  	}
  	,mediumOverlapLine: function(x_,y_) {
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		var curveEnds = false;
  		var overlap = true;
  		if(overlap == null) {
  			overlap = false;
  		}
  		if(curveEnds == null) {
  			curveEnds = false;
  		}
  		var oldAngle = _this.dx != null ? _this.angle1 : null;
  		_this.halfA = Math.PI / 2;
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var x = _this.dxOld - x_;
  		var y = _this.dyOld - y_;
  		var x1 = _this.exOld - x_;
  		var y1 = _this.eyOld - y_;
  		var clockWise = x * x + y * y > x1 * x1 + y1 * y1;
  		var theta0;
  		var theta1;
  		if(clockWise) {
  			theta0 = -Math.atan2(_this.ay - _this.dyOld,_this.ax - _this.dxOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.eyPrev,_this.ax - _this.exPrev) - Math.PI / 2;
  		} else {
  			theta0 = -Math.atan2(_this.ay - _this.eyOld,_this.ax - _this.exOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.dyPrev,_this.ax - _this.dxPrev) - Math.PI / 2;
  		}
  		var dif;
  		switch(fracs_DifferencePreference.SMALL._hx_index) {
  		case 0:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		if(!overlap && _this.count != 0) {
  			var gamma = Math.abs(dif) / 2;
  			var h = width_ / 2 / Math.cos(gamma);
  			var f;
  			if(theta0 <= Math.PI && theta0 > -Math.PI) {
  				f = theta0;
  			} else {
  				var a = (theta0 + Math.PI) % (2 * Math.PI);
  				f = a >= 0 ? a - Math.PI : a + Math.PI;
  			}
  			var this1 = f;
  			var start = this1;
  			var start2 = start;
  			var delta = start2 + dif / 2 + Math.PI;
  			_this.jx = _this.ax + h * Math.sin(delta);
  			_this.jy = _this.ay + h * Math.cos(delta);
  		}
  		if(_this.count == 0 && (_this.endLine == 1 || _this.endLine == 3)) {
  			var ax = _this.ax;
  			var ay = _this.ay;
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 + Math.PI;
  			var temp = [];
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif1;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 > 0 ? dif2 : 2 * Math.PI + dif2;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 < 0 ? dif2 : -2 * Math.PI + dif2;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = smallest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = largest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif1 >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif1) / step);
  			var step = dif1 / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var p2 = temp.length;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = ax + radius * Math.sin(angle);
  				cy = ay + radius * Math.cos(angle);
  				temp[p2++] = cx;
  				temp[p2++] = cy;
  				if(i != 0) {
  					drawType.triangle(ax,ay,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			var pA = _this.pointsAnti.length;
  			var len = temp.length / 2 | 0;
  			var p4 = temp.length / 4 | 0;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsAnti[pA++] = temp[len - 2 * i + 1];
  				_this.pointsAnti[pA++] = temp[len - 2 * i];
  			}
  			var pC = _this.pointsClock.length;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsClock[pC++] = temp[i * 2 + len + 1];
  				_this.pointsClock[pC++] = temp[i * 2 + len];
  			}
  		}
  		if(overlap) {
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  		} else {
  			if(_this.count != 0) {
  				_this.addQuads(clockWise,width_);
  			}
  			_this.quadIndex = _this.pen.drawType.get_pos();
  			if(_this.count == 0) {
  				_this.penultimateAX = _this.dxPrev;
  				_this.penultimateAY = _this.dyPrev;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.exPrev;
  				_this.lastClockY = _this.eyPrev;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				if(clockWise && !_this.lastClock) {
  					_this.penultimateAX = _this.jx;
  					_this.penultimateAY = _this.jy;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					_this.penultimateCX = _this.dx;
  					_this.penultimateCY = _this.dy;
  					_this.lastClockX = _this.exPrev;
  					_this.lastClockY = _this.eyPrev;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  				if(clockWise && _this.lastClock) {
  					_this.penultimateAX = _this.jx;
  					_this.penultimateAY = _this.jy;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					_this.penultimateCX = _this.dx;
  					_this.penultimateCY = _this.dy;
  					_this.lastClockX = _this.exPrev;
  					_this.lastClockY = _this.eyPrev;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  				if(!clockWise && !_this.lastClock) {
  					_this.penultimateCX = _this.dx;
  					_this.penultimateCY = _this.dy;
  					_this.lastClockX = _this.jx;
  					_this.lastClockY = _this.jy;
  					_this.penultimateAX = _this.dxPrev;
  					_this.penultimateAY = _this.dyPrev;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.jx,_this.jy,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  				if(!clockWise && _this.lastClock) {
  					_this.penultimateAX = _this.dxPrev;
  					_this.penultimateAY = _this.dyPrev;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					_this.penultimateCX = _this.jx;
  					_this.penultimateCY = _this.jy;
  					_this.lastClockX = _this.dx;
  					_this.lastClockY = _this.dy;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  			}
  		}
  		if(curveEnds) {
  			if(clockWise) {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsClock;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			} else {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsAnti;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			}
  		} else if(_this.count != 0) {
  			if(overlap) {
  				if(clockWise) {
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxOld,_this.dyOld,0,_this.exPrev,_this.eyPrev,0,_this.ax,_this.ay,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				} else {
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.exOld,_this.eyOld,0,_this.dxPrev,_this.dyPrev,0,_this.ax,_this.ay,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  			} else if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxOld,_this.dyOld,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.exOld,_this.eyOld,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.kax = _this.dxPrev;
  		_this.kay = _this.dyPrev;
  		_this.kbx = _this.dx;
  		_this.kby = _this.dy;
  		_this.ncx = _this.exPrev;
  		_this.ncy = _this.eyPrev;
  		_this.kcx = _this.ex;
  		_this.kcy = _this.ey;
  		if(curveEnds && !overlap && _this.count != 0) {
  			if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxOld,_this.dyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exOld,_this.eyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.jxOld = _this.jx;
  		_this.jyOld = _this.jy;
  		_this.lastClock = clockWise;
  		_this.count++;
  	}
  	,fineLine: function(x_,y_) {
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		var curveEnds = true;
  		if(curveEnds == null) {
  			curveEnds = false;
  		}
  		var oldAngle = _this.dx != null ? _this.angle1 : null;
  		_this.halfA = Math.PI / 2;
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var x = _this.dxOld - x_;
  		var y = _this.dyOld - y_;
  		var x1 = _this.exOld - x_;
  		var y1 = _this.eyOld - y_;
  		var clockWise = x * x + y * y > x1 * x1 + y1 * y1;
  		var theta0;
  		var theta1;
  		if(clockWise) {
  			theta0 = -Math.atan2(_this.ay - _this.dyOld,_this.ax - _this.dxOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.eyPrev,_this.ax - _this.exPrev) - Math.PI / 2;
  		} else {
  			theta0 = -Math.atan2(_this.ay - _this.eyOld,_this.ax - _this.exOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.dyPrev,_this.ax - _this.dxPrev) - Math.PI / 2;
  		}
  		var dif;
  		switch(fracs_DifferencePreference.SMALL._hx_index) {
  		case 0:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		if(_this.count != 0) {
  			var gamma = Math.abs(dif) / 2;
  			var h = width_ / 2 / Math.cos(gamma);
  			var f;
  			if(theta0 <= Math.PI && theta0 > -Math.PI) {
  				f = theta0;
  			} else {
  				var a = (theta0 + Math.PI) % (2 * Math.PI);
  				f = a >= 0 ? a - Math.PI : a + Math.PI;
  			}
  			var this1 = f;
  			var start = this1;
  			var start2 = start;
  			var delta = start2 + dif / 2 + Math.PI;
  			_this.jx = _this.ax + h * Math.sin(delta);
  			_this.jy = _this.ay + h * Math.cos(delta);
  		}
  		if(_this.count == 0 && (_this.endLine == 1 || _this.endLine == 3)) {
  			var ax = _this.ax;
  			var ay = _this.ay;
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 + Math.PI;
  			var temp = [];
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif1;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 > 0 ? dif2 : 2 * Math.PI + dif2;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 < 0 ? dif2 : -2 * Math.PI + dif2;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = smallest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = largest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif1 >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif1) / step);
  			var step = dif1 / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var p2 = temp.length;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = ax + radius * Math.sin(angle);
  				cy = ay + radius * Math.cos(angle);
  				temp[p2++] = cx;
  				temp[p2++] = cy;
  				if(i != 0) {
  					drawType.triangle(ax,ay,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			var pA = _this.pointsAnti.length;
  			var len = temp.length / 2 | 0;
  			var p4 = temp.length / 4 | 0;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsAnti[pA++] = temp[len - 2 * i + 1];
  				_this.pointsAnti[pA++] = temp[len - 2 * i];
  			}
  			var pC = _this.pointsClock.length;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsClock[pC++] = temp[i * 2 + len + 1];
  				_this.pointsClock[pC++] = temp[i * 2 + len];
  			}
  		}
  		if(_this.count != 0) {
  			_this.addQuads(clockWise,width_);
  		}
  		_this.quadIndex = _this.pen.drawType.get_pos();
  		if(_this.count == 0) {
  			_this.penultimateAX = _this.dxPrev;
  			_this.penultimateAY = _this.dyPrev;
  			_this.lastAntiX = _this.ex;
  			_this.lastAntiY = _this.ey;
  			_this.penultimateCX = _this.dx;
  			_this.penultimateCY = _this.dy;
  			_this.lastClockX = _this.exPrev;
  			_this.lastClockY = _this.eyPrev;
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == null) {
  				color = -1;
  			}
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == null) {
  				color = -1;
  			}
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  		} else {
  			if(clockWise && !_this.lastClock) {
  				_this.penultimateAX = _this.jx;
  				_this.penultimateAY = _this.jy;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.exPrev;
  				_this.lastClockY = _this.eyPrev;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  			if(clockWise && _this.lastClock) {
  				_this.penultimateAX = _this.jx;
  				_this.penultimateAY = _this.jy;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.exPrev;
  				_this.lastClockY = _this.eyPrev;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  			if(!clockWise && !_this.lastClock) {
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.jx;
  				_this.lastClockY = _this.jy;
  				_this.penultimateAX = _this.dxPrev;
  				_this.penultimateAY = _this.dyPrev;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  			if(!clockWise && _this.lastClock) {
  				_this.penultimateAX = _this.dxPrev;
  				_this.penultimateAY = _this.dyPrev;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.jx;
  				_this.penultimateCY = _this.jy;
  				_this.lastClockX = _this.dx;
  				_this.lastClockY = _this.dy;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		if(curveEnds) {
  			if(clockWise) {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsClock;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			} else {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsAnti;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			}
  		} else if(_this.count != 0) {
  			if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxOld,_this.dyOld,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.exOld,_this.eyOld,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.kax = _this.dxPrev;
  		_this.kay = _this.dyPrev;
  		_this.kbx = _this.dx;
  		_this.kby = _this.dy;
  		_this.ncx = _this.exPrev;
  		_this.ncy = _this.eyPrev;
  		_this.kcx = _this.ex;
  		_this.kcy = _this.ey;
  		if(curveEnds && _this.count != 0) {
  			if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxOld,_this.dyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exOld,_this.eyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.jxOld = _this.jx;
  		_this.jyOld = _this.jy;
  		_this.lastClock = clockWise;
  		_this.count++;
  	}
  	,fineOverlapLine: function(x_,y_) {
  		var _this = this.contour;
  		var ax_ = this.x;
  		var ay_ = this.y;
  		var width_ = this.width;
  		var curveEnds = true;
  		var overlap = true;
  		if(overlap == null) {
  			overlap = false;
  		}
  		if(curveEnds == null) {
  			curveEnds = false;
  		}
  		var oldAngle = _this.dx != null ? _this.angle1 : null;
  		_this.halfA = Math.PI / 2;
  		_this.ax = x_;
  		_this.ay = y_;
  		_this.bx = ax_;
  		_this.by = ay_;
  		_this.beta = Math.PI / 2 - _this.halfA;
  		_this.r = width_ / 2 * Math.cos(_this.beta);
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		_this.ax = ax_;
  		_this.ay = ay_;
  		_this.bx = x_;
  		_this.by = y_;
  		_this.theta = Math.atan2(_this.ay - _this.by,_this.ax - _this.bx);
  		if(_this.theta > 0) {
  			if(_this.halfA < 0) {
  				_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  				_this.angle1 = _this.theta - _this.halfA;
  			} else {
  				_this.angle1 = _this.theta + _this.halfA - Math.PI;
  				_this.angle2 = _this.theta + _this.halfA;
  			}
  		} else if(_this.halfA > 0) {
  			_this.angle1 = _this.theta + _this.halfA - Math.PI;
  			_this.angle2 = _this.theta + _this.halfA;
  		} else {
  			_this.angle2 = _this.theta + _this.halfA + Math.PI / 2;
  			_this.angle1 = _this.theta - _this.halfA;
  		}
  		if(_this.dxPrev != null) {
  			_this.dxOld = _this.dxPrev;
  		}
  		if(_this.dyPrev != null) {
  			_this.dyOld = _this.dyPrev;
  		}
  		if(_this.exPrev != null) {
  			_this.exOld = _this.exPrev;
  		}
  		if(_this.eyPrev != null) {
  			_this.eyOld = _this.eyPrev;
  		}
  		if(_this.dx != null) {
  			_this.dxPrev = _this.dx;
  		}
  		if(_this.dy != null) {
  			_this.dyPrev = _this.dy;
  		}
  		if(_this.ex != null) {
  			_this.exPrev = _this.ex;
  		}
  		if(_this.ey != null) {
  			_this.eyPrev = _this.ey;
  		}
  		_this.dx = _this.bx + _this.r * Math.cos(_this.angle1);
  		_this.dy = _this.by + _this.r * Math.sin(_this.angle1);
  		_this.ex = _this.bx + _this.r * Math.cos(_this.angle2);
  		_this.ey = _this.by + _this.r * Math.sin(_this.angle2);
  		var x = _this.dxOld - x_;
  		var y = _this.dyOld - y_;
  		var x1 = _this.exOld - x_;
  		var y1 = _this.eyOld - y_;
  		var clockWise = x * x + y * y > x1 * x1 + y1 * y1;
  		var theta0;
  		var theta1;
  		if(clockWise) {
  			theta0 = -Math.atan2(_this.ay - _this.dyOld,_this.ax - _this.dxOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.eyPrev,_this.ax - _this.exPrev) - Math.PI / 2;
  		} else {
  			theta0 = -Math.atan2(_this.ay - _this.eyOld,_this.ax - _this.exOld) - Math.PI / 2;
  			theta1 = -Math.atan2(_this.ay - _this.dyPrev,_this.ax - _this.dxPrev) - Math.PI / 2;
  		}
  		var dif;
  		switch(fracs_DifferencePreference.SMALL._hx_index) {
  		case 0:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(theta0 >= 0 && theta0 > Math.PI) {
  				f = theta0;
  			} else {
  				var a = theta0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(theta1 >= 0 && theta1 > Math.PI) {
  				f = theta1;
  			} else {
  				var a = theta1 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		if(!overlap && _this.count != 0) {
  			var gamma = Math.abs(dif) / 2;
  			var h = width_ / 2 / Math.cos(gamma);
  			var f;
  			if(theta0 <= Math.PI && theta0 > -Math.PI) {
  				f = theta0;
  			} else {
  				var a = (theta0 + Math.PI) % (2 * Math.PI);
  				f = a >= 0 ? a - Math.PI : a + Math.PI;
  			}
  			var this1 = f;
  			var start = this1;
  			var start2 = start;
  			var delta = start2 + dif / 2 + Math.PI;
  			_this.jx = _this.ax + h * Math.sin(delta);
  			_this.jy = _this.ay + h * Math.cos(delta);
  		}
  		if(_this.count == 0 && (_this.endLine == 1 || _this.endLine == 3)) {
  			var ax = _this.ax;
  			var ay = _this.ay;
  			var radius = width_ / 2;
  			var beta = -_this.angle1 - Math.PI / 2;
  			var gamma = -_this.angle1 - Math.PI / 2 + Math.PI;
  			var temp = [];
  			var drawType = _this.pen.drawType;
  			var sides = 36;
  			if(sides == null) {
  				sides = 36;
  			}
  			var pi = Math.PI;
  			var step = pi * 2 / sides;
  			var dif1;
  			switch(fracs_DifferencePreference.SMALL._hx_index) {
  			case 0:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 > 0 ? dif2 : 2 * Math.PI + dif2;
  				break;
  			case 1:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = dif2 < 0 ? dif2 : -2 * Math.PI + dif2;
  				break;
  			case 2:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var smallest = theta <= Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = smallest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			case 3:
  				var f;
  				if(beta >= 0 && beta > Math.PI) {
  					f = beta;
  				} else {
  					var a = beta % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var za = this1;
  				var f;
  				if(gamma >= 0 && gamma > Math.PI) {
  					f = gamma;
  				} else {
  					var a = gamma % (2 * Math.PI);
  					f = a >= 0 ? a : a + 2 * Math.PI;
  				}
  				var this1 = f;
  				var zb = this1;
  				var fa = za;
  				var fb = zb;
  				var theta = Math.abs(fa - fb);
  				var largest = theta > Math.PI;
  				var clockwise = fa < fb;
  				var dif2 = clockwise ? theta : -theta;
  				dif1 = largest ? dif2 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  				break;
  			}
  			var positive = dif1 >= 0;
  			var totalSteps = Math.ceil(Math.abs(dif1) / step);
  			var step = dif1 / totalSteps;
  			var angle = beta;
  			var cx;
  			var cy;
  			var bx = 0;
  			var by = 0;
  			var p2 = temp.length;
  			var _g = 0;
  			var _g1 = totalSteps + 1;
  			while(_g < _g1) {
  				var i = _g++;
  				cx = ax + radius * Math.sin(angle);
  				cy = ay + radius * Math.cos(angle);
  				temp[p2++] = cx;
  				temp[p2++] = cy;
  				if(i != 0) {
  					drawType.triangle(ax,ay,0,bx,by,0,cx,cy,0);
  					var m = trilateral3_Trilateral.transformMatrix;
  					if(m != null) {
  						drawType.transform(m);
  					}
  					drawType.next();
  				}
  				angle += step;
  				bx = cx;
  				by = cy;
  			}
  			var len = totalSteps;
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.colorType.colorTriangles(color,len);
  			var pA = _this.pointsAnti.length;
  			var len = temp.length / 2 | 0;
  			var p4 = temp.length / 4 | 0;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsAnti[pA++] = temp[len - 2 * i + 1];
  				_this.pointsAnti[pA++] = temp[len - 2 * i];
  			}
  			var pC = _this.pointsClock.length;
  			var _g = 0;
  			var _g1 = p4;
  			while(_g < _g1) {
  				var i = _g++;
  				_this.pointsClock[pC++] = temp[i * 2 + len + 1];
  				_this.pointsClock[pC++] = temp[i * 2 + len];
  			}
  		}
  		if(overlap) {
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  			var _this1 = _this.pen;
  			var color = -1;
  			if(color == -1) {
  				color = _this1.currentColor;
  			}
  			_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  			if(trilateral3_Trilateral.transformMatrix != null) {
  				_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  			}
  			_this1.drawType.next();
  			_this1.colorType.cornerColors(color,color,color);
  		} else {
  			if(_this.count != 0) {
  				_this.addQuads(clockWise,width_);
  			}
  			_this.quadIndex = _this.pen.drawType.get_pos();
  			if(_this.count == 0) {
  				_this.penultimateAX = _this.dxPrev;
  				_this.penultimateAY = _this.dyPrev;
  				_this.lastAntiX = _this.ex;
  				_this.lastAntiY = _this.ey;
  				_this.penultimateCX = _this.dx;
  				_this.penultimateCY = _this.dy;
  				_this.lastClockX = _this.exPrev;
  				_this.lastClockY = _this.eyPrev;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				if(clockWise && !_this.lastClock) {
  					_this.penultimateAX = _this.jx;
  					_this.penultimateAY = _this.jy;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					_this.penultimateCX = _this.dx;
  					_this.penultimateCY = _this.dy;
  					_this.lastClockX = _this.exPrev;
  					_this.lastClockY = _this.eyPrev;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  				if(clockWise && _this.lastClock) {
  					_this.penultimateAX = _this.jx;
  					_this.penultimateAY = _this.jy;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					_this.penultimateCX = _this.dx;
  					_this.penultimateCY = _this.dy;
  					_this.lastClockX = _this.exPrev;
  					_this.lastClockY = _this.eyPrev;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.exPrev,_this.eyPrev,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  				if(!clockWise && !_this.lastClock) {
  					_this.penultimateCX = _this.dx;
  					_this.penultimateCY = _this.dy;
  					_this.lastClockX = _this.jx;
  					_this.lastClockY = _this.jy;
  					_this.penultimateAX = _this.dxPrev;
  					_this.penultimateAY = _this.dyPrev;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.jx,_this.jy,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  				if(!clockWise && _this.lastClock) {
  					_this.penultimateAX = _this.dxPrev;
  					_this.penultimateAY = _this.dyPrev;
  					_this.lastAntiX = _this.ex;
  					_this.lastAntiY = _this.ey;
  					_this.penultimateCX = _this.jx;
  					_this.penultimateCY = _this.jy;
  					_this.lastClockX = _this.dx;
  					_this.lastClockY = _this.dy;
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.jx,_this.jy,0,_this.dx,_this.dy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0,_this.ex,_this.ey,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  			}
  		}
  		if(curveEnds) {
  			if(clockWise) {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsClock;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			} else {
  				var drawType = _this.pen.drawType;
  				var radius = width_ / 2;
  				var edgePoly = _this.pointsAnti;
  				var pi = Math.PI;
  				var step = pi * 2 / 36;
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = theta0;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = edgePoly.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax_ + radius * Math.sin(angle);
  					cy = ay_ + radius * Math.cos(angle);
  					edgePoly[p2++] = cx;
  					edgePoly[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax_,ay_,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  			}
  		} else if(_this.count != 0) {
  			if(overlap) {
  				if(clockWise) {
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.dxOld,_this.dyOld,0,_this.exPrev,_this.eyPrev,0,_this.ax,_this.ay,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				} else {
  					var _this1 = _this.pen;
  					var color = -1;
  					if(color == null) {
  						color = -1;
  					}
  					if(color == -1) {
  						color = _this1.currentColor;
  					}
  					_this1.drawType.triangle(_this.exOld,_this.eyOld,0,_this.dxPrev,_this.dyPrev,0,_this.ax,_this.ay,0);
  					if(trilateral3_Trilateral.transformMatrix != null) {
  						_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  					}
  					_this1.drawType.next();
  					_this1.colorType.cornerColors(color,color,color);
  				}
  			} else if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.dxOld,_this.dyOld,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.exOld,_this.eyOld,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.kax = _this.dxPrev;
  		_this.kay = _this.dyPrev;
  		_this.kbx = _this.dx;
  		_this.kby = _this.dy;
  		_this.ncx = _this.exPrev;
  		_this.ncy = _this.eyPrev;
  		_this.kcx = _this.ex;
  		_this.kcy = _this.ey;
  		if(curveEnds && !overlap && _this.count != 0) {
  			if(clockWise) {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxOld,_this.dyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exPrev,_this.eyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			} else {
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.exOld,_this.eyOld,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  				var _this1 = _this.pen;
  				var color = -1;
  				if(color == null) {
  					color = -1;
  				}
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.drawType.triangle(_this.ax,_this.ay,0,_this.dxPrev,_this.dyPrev,0,_this.jx,_this.jy,0);
  				if(trilateral3_Trilateral.transformMatrix != null) {
  					_this1.drawType.transform(trilateral3_Trilateral.transformMatrix);
  				}
  				_this1.drawType.next();
  				_this1.colorType.cornerColors(color,color,color);
  			}
  		}
  		_this.jxOld = _this.jx;
  		_this.jyOld = _this.jy;
  		_this.lastClock = clockWise;
  		_this.count++;
  	}
  	,moveTo: function(x_,y_) {
  		if(this.endLine == 2 || this.endLine == 3) {
  			var _this = this.contour;
  			var width_ = this.width;
  			_this.endEdges();
  			if(_this.count != 0) {
  				var ax = _this.bx;
  				var ay = _this.by;
  				var radius = width_ / 2;
  				var beta = -_this.angle1 - Math.PI / 2;
  				var gamma = -_this.angle1 - Math.PI / 2 - Math.PI;
  				var temp = [];
  				var drawType = _this.pen.drawType;
  				var sides = 36;
  				if(sides == null) {
  					sides = 36;
  				}
  				var pi = Math.PI;
  				var step = pi * 2 / sides;
  				var dif;
  				switch(fracs_DifferencePreference.SMALL._hx_index) {
  				case 0:
  					var f;
  					if(beta >= 0 && beta > Math.PI) {
  						f = beta;
  					} else {
  						var a = beta % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var za = this1;
  					var f;
  					if(gamma >= 0 && gamma > Math.PI) {
  						f = gamma;
  					} else {
  						var a = gamma % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var zb = this1;
  					var fa = za;
  					var fb = zb;
  					var theta = Math.abs(fa - fb);
  					var clockwise = fa < fb;
  					var dif1 = clockwise ? theta : -theta;
  					dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  					break;
  				case 1:
  					var f;
  					if(beta >= 0 && beta > Math.PI) {
  						f = beta;
  					} else {
  						var a = beta % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var za = this1;
  					var f;
  					if(gamma >= 0 && gamma > Math.PI) {
  						f = gamma;
  					} else {
  						var a = gamma % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var zb = this1;
  					var fa = za;
  					var fb = zb;
  					var theta = Math.abs(fa - fb);
  					var clockwise = fa < fb;
  					var dif1 = clockwise ? theta : -theta;
  					dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  					break;
  				case 2:
  					var f;
  					if(beta >= 0 && beta > Math.PI) {
  						f = beta;
  					} else {
  						var a = beta % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var za = this1;
  					var f;
  					if(gamma >= 0 && gamma > Math.PI) {
  						f = gamma;
  					} else {
  						var a = gamma % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var zb = this1;
  					var fa = za;
  					var fb = zb;
  					var theta = Math.abs(fa - fb);
  					var smallest = theta <= Math.PI;
  					var clockwise = fa < fb;
  					var dif1 = clockwise ? theta : -theta;
  					dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  					break;
  				case 3:
  					var f;
  					if(beta >= 0 && beta > Math.PI) {
  						f = beta;
  					} else {
  						var a = beta % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var za = this1;
  					var f;
  					if(gamma >= 0 && gamma > Math.PI) {
  						f = gamma;
  					} else {
  						var a = gamma % (2 * Math.PI);
  						f = a >= 0 ? a : a + 2 * Math.PI;
  					}
  					var this1 = f;
  					var zb = this1;
  					var fa = za;
  					var fb = zb;
  					var theta = Math.abs(fa - fb);
  					var largest = theta > Math.PI;
  					var clockwise = fa < fb;
  					var dif1 = clockwise ? theta : -theta;
  					dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  					break;
  				}
  				var positive = dif >= 0;
  				var totalSteps = Math.ceil(Math.abs(dif) / step);
  				var step = dif / totalSteps;
  				var angle = beta;
  				var cx;
  				var cy;
  				var bx = 0;
  				var by = 0;
  				var p2 = temp.length;
  				var _g = 0;
  				var _g1 = totalSteps + 1;
  				while(_g < _g1) {
  					var i = _g++;
  					cx = ax + radius * Math.sin(angle);
  					cy = ay + radius * Math.cos(angle);
  					temp[p2++] = cx;
  					temp[p2++] = cy;
  					if(i != 0) {
  						drawType.triangle(ax,ay,0,bx,by,0,cx,cy,0);
  						var m = trilateral3_Trilateral.transformMatrix;
  						if(m != null) {
  							drawType.transform(m);
  						}
  						drawType.next();
  					}
  					angle += step;
  					bx = cx;
  					by = cy;
  				}
  				var len = totalSteps;
  				var _this1 = _this.pen;
  				var color = 0;
  				if(color == -1) {
  					color = _this1.currentColor;
  				}
  				_this1.colorType.colorTriangles(color,len);
  				var pA = _this.pointsAnti.length;
  				var len = temp.length / 2 | 0;
  				var _g = 0;
  				var _g1 = len + 2;
  				while(_g < _g1) {
  					var i = _g++;
  					_this.pointsAnti[pA++] = temp[i];
  				}
  				var pC = _this.pointsClock.length;
  				var _g = 1;
  				var _g1 = len / 2 + 1 | 0;
  				while(_g < _g1) {
  					var i = _g++;
  					_this.pointsClock[pC++] = temp[temp.length - 2 * i];
  					_this.pointsClock[pC++] = temp[temp.length - 2 * i - 1];
  				}
  			}
  		}
  		this.x = x_;
  		this.y = y_;
  		var l = this.points.length;
  		this.points[l] = [];
  		this.points[l][0] = x_;
  		this.points[l][1] = y_;
  		this.pointsClock[this.pointsClock.length] = this.contour.pointsClock.slice();
  		this.pointsAnti[this.pointsAnti.length] = this.contour.pointsAnti.slice();
  		this.dim[this.dim.length] = { minX : Infinity, maxX : -Infinity, minY : Infinity, maxY : -Infinity};
  		var d = this.dim[this.dim.length - 1];
  		if(x_ < d.minX) {
  			d.minX = x_;
  		}
  		if(x_ > d.maxX) {
  			d.maxX = x_;
  		}
  		if(y_ < d.minY) {
  			d.minY = y_;
  		}
  		if(y_ > d.maxY) {
  			d.maxY = y_;
  		}
  		this.contour.reset();
  	}
  	,lineTo: function(x_,y_) {
  		var repeat = this.x == x_ && this.y == y_;
  		if(!repeat) {
  			if(this.widthFunction != null) {
  				this.width = this.widthFunction(this.width,this.x,this.y,x_,y_);
  			}
  			if(this.colourFunction != null) {
  				this.pen.currentColor = this.colourFunction(this.pen.currentColor,this.x,this.y,x_,y_);
  			}
  			this.line(x_,y_);
  			var l = this.points.length;
  			var p = this.points[l - 1];
  			var l2 = p.length;
  			p[l2] = x_;
  			p[l2 + 1] = y_;
  			var d = this.dim[this.dim.length - 1];
  			if(x_ < d.minX) {
  				d.minX = x_;
  			}
  			if(x_ > d.maxX) {
  				d.maxX = x_;
  			}
  			if(y_ < d.minY) {
  				d.minY = y_;
  			}
  			if(y_ > d.maxY) {
  				d.maxY = y_;
  			}
  			this.x = x_;
  			this.y = y_;
  		}
  	}
  	,quadTo: function(x1,y1,x2,y2) {
  		this.tempArr = [];
  		var p = this.tempArr;
  		var ax = this.x;
  		var ay = this.y;
  		var x = ax - x1;
  		var y = ay - y1;
  		var x3 = x1 - x2;
  		var y3 = y1 - y2;
  		var approxDistance = Math.sqrt(x * x + y * y) + Math.sqrt(x3 * x3 + y3 * y3);
  		if(approxDistance == 0) {
  			approxDistance = 0.000001;
  		}
  		var step = Math.min(1 / (approxDistance * 0.707),trilateral3_math_Algebra_quadStep);
  		var l = p.length;
  		p[l++] = ax;
  		p[l++] = ay;
  		var t = step;
  		while(t < 1.) {
  			var u = 1 - t;
  			p[l++] = Math.pow(u,2) * ax + 2 * u * t * x1 + Math.pow(t,2) * x2;
  			var u1 = 1 - t;
  			p[l++] = Math.pow(u1,2) * ay + 2 * u1 * t * y1 + Math.pow(t,2) * y2;
  			t += step;
  		}
  		p[l++] = x2;
  		p[l++] = y2;
  		var arr = this.tempArr;
  		var withMove = false;
  		if(withMove == null) {
  			withMove = true;
  		}
  		var l = arr.length;
  		var i = 2;
  		if(withMove) {
  			this.moveTo(arr[0],arr[1]);
  		} else {
  			var x_ = arr[0];
  			var y_ = arr[1];
  			var repeat = this.x == x_ && this.y == y_;
  			if(!repeat) {
  				if(this.widthFunction != null) {
  					this.width = this.widthFunction(this.width,this.x,this.y,x_,y_);
  				}
  				if(this.colourFunction != null) {
  					this.pen.currentColor = this.colourFunction(this.pen.currentColor,this.x,this.y,x_,y_);
  				}
  				this.line(x_,y_);
  				var l1 = this.points.length;
  				var p = this.points[l1 - 1];
  				var l2 = p.length;
  				p[l2] = x_;
  				p[l2 + 1] = y_;
  				var d = this.dim[this.dim.length - 1];
  				if(x_ < d.minX) {
  					d.minX = x_;
  				}
  				if(x_ > d.maxX) {
  					d.maxX = x_;
  				}
  				if(y_ < d.minY) {
  					d.minY = y_;
  				}
  				if(y_ > d.maxY) {
  					d.maxY = y_;
  				}
  				this.x = x_;
  				this.y = y_;
  			}
  		}
  		while(i < l) {
  			var x_ = arr[i];
  			var y_ = arr[i + 1];
  			var repeat = this.x == x_ && this.y == y_;
  			if(!repeat) {
  				if(this.widthFunction != null) {
  					this.width = this.widthFunction(this.width,this.x,this.y,x_,y_);
  				}
  				if(this.colourFunction != null) {
  					this.pen.currentColor = this.colourFunction(this.pen.currentColor,this.x,this.y,x_,y_);
  				}
  				this.line(x_,y_);
  				var l1 = this.points.length;
  				var p = this.points[l1 - 1];
  				var l2 = p.length;
  				p[l2] = x_;
  				p[l2 + 1] = y_;
  				var d = this.dim[this.dim.length - 1];
  				if(x_ < d.minX) {
  					d.minX = x_;
  				}
  				if(x_ > d.maxX) {
  					d.maxX = x_;
  				}
  				if(y_ < d.minY) {
  					d.minY = y_;
  				}
  				if(y_ > d.maxY) {
  					d.maxY = y_;
  				}
  				this.x = x_;
  				this.y = y_;
  			}
  			i += 2;
  		}
  		this.x = x2;
  		this.y = y2;
  	}
  	,curveTo: function(x1,y1,x2,y2,x3,y3) {
  		this.tempArr = [];
  		var p = this.tempArr;
  		var ax = this.x;
  		var ay = this.y;
  		var x = ax - x1;
  		var y = ay - y1;
  		var x4 = x1 - x2;
  		var y4 = y1 - y2;
  		var x5 = x2 - x3;
  		var y5 = y2 - y3;
  		var approxDistance = Math.sqrt(x * x + y * y) + Math.sqrt(x4 * x4 + y4 * y4) + Math.sqrt(x5 * x5 + y5 * y5);
  		if(approxDistance == 0) {
  			approxDistance = 0.000001;
  		}
  		var step = Math.min(1 / (approxDistance * 0.707),0.03);
  		var l = p.length;
  		p[l++] = ax;
  		p[l++] = ay;
  		var t = step;
  		while(t < 1.) {
  			var u = 1 - t;
  			p[l++] = Math.pow(u,3) * ax + 3 * Math.pow(u,2) * t * x1 + 3 * u * Math.pow(t,2) * x2 + Math.pow(t,3) * x3;
  			var u1 = 1 - t;
  			p[l++] = Math.pow(u1,3) * ay + 3 * Math.pow(u1,2) * t * y1 + 3 * u1 * Math.pow(t,2) * y2 + Math.pow(t,3) * y3;
  			t += step;
  		}
  		p[l++] = x3;
  		p[l++] = y3;
  		var arr = this.tempArr;
  		var withMove = false;
  		if(withMove == null) {
  			withMove = true;
  		}
  		var l = arr.length;
  		var i = 2;
  		if(withMove) {
  			this.moveTo(arr[0],arr[1]);
  		} else {
  			var x_ = arr[0];
  			var y_ = arr[1];
  			var repeat = this.x == x_ && this.y == y_;
  			if(!repeat) {
  				if(this.widthFunction != null) {
  					this.width = this.widthFunction(this.width,this.x,this.y,x_,y_);
  				}
  				if(this.colourFunction != null) {
  					this.pen.currentColor = this.colourFunction(this.pen.currentColor,this.x,this.y,x_,y_);
  				}
  				this.line(x_,y_);
  				var l1 = this.points.length;
  				var p = this.points[l1 - 1];
  				var l2 = p.length;
  				p[l2] = x_;
  				p[l2 + 1] = y_;
  				var d = this.dim[this.dim.length - 1];
  				if(x_ < d.minX) {
  					d.minX = x_;
  				}
  				if(x_ > d.maxX) {
  					d.maxX = x_;
  				}
  				if(y_ < d.minY) {
  					d.minY = y_;
  				}
  				if(y_ > d.maxY) {
  					d.maxY = y_;
  				}
  				this.x = x_;
  				this.y = y_;
  			}
  		}
  		while(i < l) {
  			var x_ = arr[i];
  			var y_ = arr[i + 1];
  			var repeat = this.x == x_ && this.y == y_;
  			if(!repeat) {
  				if(this.widthFunction != null) {
  					this.width = this.widthFunction(this.width,this.x,this.y,x_,y_);
  				}
  				if(this.colourFunction != null) {
  					this.pen.currentColor = this.colourFunction(this.pen.currentColor,this.x,this.y,x_,y_);
  				}
  				this.line(x_,y_);
  				var l1 = this.points.length;
  				var p = this.points[l1 - 1];
  				var l2 = p.length;
  				p[l2] = x_;
  				p[l2 + 1] = y_;
  				var d = this.dim[this.dim.length - 1];
  				if(x_ < d.minX) {
  					d.minX = x_;
  				}
  				if(x_ > d.maxX) {
  					d.maxX = x_;
  				}
  				if(y_ < d.minY) {
  					d.minY = y_;
  				}
  				if(y_ > d.maxY) {
  					d.maxY = y_;
  				}
  				this.x = x_;
  				this.y = y_;
  			}
  			i += 2;
  		}
  		this.x = x3;
  		this.y = y3;
  	}
  	,__class__: trilateral3_drawing_Sketch
  };
  var trilateral3Setup_ShaderTest = $hxEnums["trilateral3Setup.ShaderTest"] = { __ename__ : "trilateral3Setup.ShaderTest", __constructs__ : ["WithColor","WithTexture"]
  	,WithColor: {_hx_index:0,__enum__:"trilateral3Setup.ShaderTest",toString:$estr}
  	,WithTexture: {_hx_index:1,__enum__:"trilateral3Setup.ShaderTest",toString:$estr}
  };
  var trilateral3Setup_Main = function() {
  	var qReal = new geom_structure_Mat1x4(0.,0.,Math.sin(0.),Math.cos(0.));
  	var qDual = new geom_structure_Mat1x4(0.,0.,-1.,1.);
  	var currentLength = Math.sqrt(qReal.x * qReal.x + qReal.y * qReal.y + qReal.z * qReal.z + qReal.w * qReal.w);
  	if(currentLength != 0.) {
  		var mul = 1. / currentLength;
  		qReal.x *= mul;
  		qReal.y *= mul;
  		qReal.z *= mul;
  		qReal.w *= mul;
  	}
  	var real = qReal;
  	var q = new geom_structure_Mat1x4(qDual.x,qDual.y,qDual.z,0.);
  	q = new geom_structure_Mat1x4(q.x * 0.5,q.y * 0.5,q.z * 0.5,q.w * 0.5);
  	this.offset = new geom_structure_DualQ(real,new geom_structure_Mat1x4(q.x * real.w + q.y * real.z - q.z * real.y + q.w * real.x,-q.x * real.z + q.y * real.w + q.z * real.x + q.w * real.y,q.x * real.y - q.y * real.x + q.z * real.w + q.w * real.z,-q.x * real.x - q.y * real.y - q.z * real.z + q.w * real.w));
  	var this1 = new Int32Array(trilateral3Setup_Main.largeEnough + 2);
  	this1[0] = 0;
  	this1[1] = 0;
  	this.ind = this1;
  	var this1 = new Float32Array(trilateral3Setup_Main.largeEnough + 2);
  	this1[0] = 0.;
  	this1[1] = 0.;
  	this.cols = this1;
  	var this1 = new Float32Array(trilateral3Setup_Main.largeEnough + 2);
  	this1[0] = 0.;
  	this1[1] = 0.;
  	this.textPos = this1;
  	var this1 = new Float32Array(trilateral3Setup_Main.largeEnough + 2);
  	this1[0] = 0.;
  	this1[1] = 0.;
  	this.verts = this1;
  	this.model = new geom_structure_DualQ(new geom_structure_Mat1x4(0.,0.,0.,1.),new geom_structure_Mat1x4(0.,0.,0.,1.));
  	this.axisModel = new geom_move_Axis3();
  	this.backgroundSquare = true;
  	this.shaderTest = trilateral3Setup_ShaderTest.WithColor;
  	this.setupSideTrace();
  	htmlHelper_webgl_WebGLSetup.call(this,600,600);
  	this.keyboardNavigation();
  	this.glSettings();
  	this.shaderAssign();
  	this.layoutPos = new trilateral3Setup_helpers_LayoutPos(600);
  	this.createPen();
  	this.loadImages($bind(this,this.loaded));
  };
  trilateral3Setup_Main.__name__ = true;
  trilateral3Setup_Main.main = function() {
  	new trilateral3Setup_Main();
  };
  trilateral3Setup_Main.__super__ = htmlHelper_webgl_WebGLSetup;
  trilateral3Setup_Main.prototype = $extend(htmlHelper_webgl_WebGLSetup.prototype,{
  	setupSideTrace: function() {
  		new htmlHelper_tools_DivertTrace();
  	}
  	,keyboardNavigation: function() {
  		var axisKeys = new trilateral3Setup_helpers_AxisKeys(this.axisModel);
  		axisKeys.reset = $bind(this,this.resetPosition);
  	}
  	,resetPosition: function() {
  		var this1 = new geom_structure_Mat1x4(0.,0.,0.,1.);
  		var this2 = new geom_structure_Mat1x4(0.,0.,0.,1.);
  		var this3 = new geom_structure_DualQ(this1,this2);
  		this.model = this3;
  	}
  	,glSettings: function() {
  		this.DEPTH_TEST = false;
  		this.BACK = false;
  		this.darkBackground();
  	}
  	,createPen: function() {
  		var verts = this.verts;
  		var cols = this.cols;
  		var _e = verts;
  		var _e1 = verts;
  		var _e2 = verts;
  		var _e3 = verts;
  		var _e4 = verts;
  		var _e5 = verts;
  		var _e6 = verts;
  		var _e7 = verts;
  		var _e8 = verts;
  		var _e9 = verts;
  		var _e10 = cols;
  		var tmp = function(colorA,colorB,colorC) {
  			geom_flat_f32_Float32FlatRGBA.set_red(_e10,(colorA >> 16 & 255) / 255);
  			var v = (colorA & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 2 + 2] = v;
  			var v = (colorA >> 8 & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 1 + 2] = v;
  			var v = (colorA >> 24 & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 3 + 2] = v;
  			var pos_ = _e10[0] + 1.;
  			_e10[0] = pos_;
  			if(_e10[0] > _e10[1] - 1) {
  				_e10[1] = _e10[0];
  			}
  			geom_flat_f32_Float32FlatRGBA.set_red(_e10,(colorB >> 16 & 255) / 255);
  			var v = (colorB & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 2 + 2] = v;
  			var v = (colorB >> 8 & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 1 + 2] = v;
  			var v = (colorB >> 24 & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 3 + 2] = v;
  			var pos_ = _e10[0] + 1.;
  			_e10[0] = pos_;
  			if(_e10[0] > _e10[1] - 1) {
  				_e10[1] = _e10[0];
  			}
  			geom_flat_f32_Float32FlatRGBA.set_red(_e10,(colorC >> 16 & 255) / 255);
  			var v = (colorC & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 2 + 2] = v;
  			var v = (colorC >> 8 & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 1 + 2] = v;
  			var v = (colorC >> 24 & 255) / 255;
  			_e10[(_e10[0] | 0) * 4 + 3 + 2] = v;
  			var pos_ = _e10[0] + 1.;
  			_e10[0] = pos_;
  			if(_e10[0] > _e10[1] - 1) {
  				_e10[1] = _e10[0];
  			}
  		};
  		var _e11 = cols;
  		var tmp1 = function(color,times) {
  			var _g = 0;
  			var _g1 = times;
  			while(_g < _g1) {
  				var i = _g++;
  				geom_flat_f32_Float32FlatRGBA.set_red(_e11,(color >> 16 & 255) / 255);
  				var v = (color & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 2 + 2] = v;
  				var v1 = (color >> 8 & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 1 + 2] = v1;
  				var v2 = (color >> 24 & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 3 + 2] = v2;
  				var pos_ = _e11[0] + 1.;
  				_e11[0] = pos_;
  				if(_e11[0] > _e11[1] - 1) {
  					_e11[1] = _e11[0];
  				}
  				geom_flat_f32_Float32FlatRGBA.set_red(_e11,(color >> 16 & 255) / 255);
  				var v3 = (color & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 2 + 2] = v3;
  				var v4 = (color >> 8 & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 1 + 2] = v4;
  				var v5 = (color >> 24 & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 3 + 2] = v5;
  				var pos_1 = _e11[0] + 1.;
  				_e11[0] = pos_1;
  				if(_e11[0] > _e11[1] - 1) {
  					_e11[1] = _e11[0];
  				}
  				geom_flat_f32_Float32FlatRGBA.set_red(_e11,(color >> 16 & 255) / 255);
  				var v6 = (color & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 2 + 2] = v6;
  				var v7 = (color >> 8 & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 1 + 2] = v7;
  				var v8 = (color >> 24 & 255) / 255;
  				_e11[(_e11[0] | 0) * 4 + 3 + 2] = v8;
  				var pos_2 = _e11[0] + 1.;
  				_e11[0] = pos_2;
  				if(_e11[0] > _e11[1] - 1) {
  					_e11[1] = _e11[0];
  				}
  			}
  		};
  		var _e12 = cols;
  		var tmp2 = function() {
  			var a = Math.round(_e12[(_e12[0] | 0) * 4 + 3 + 2] * 255) << 24 | Math.round(geom_flat_f32_Float32FlatRGBA.get_red(_e12) * 255) << 16 | Math.round(_e12[(_e12[0] | 0) * 4 + 1 + 2] * 255) << 8 | Math.round(_e12[(_e12[0] | 0) * 4 + 2 + 2] * 255);
  			var pos_ = _e12[0] + 1.;
  			_e12[0] = pos_;
  			if(_e12[0] > _e12[1] - 1) {
  				_e12[1] = _e12[0];
  			}
  			var b = Math.round(_e12[(_e12[0] | 0) * 4 + 3 + 2] * 255) << 24 | Math.round(geom_flat_f32_Float32FlatRGBA.get_red(_e12) * 255) << 16 | Math.round(_e12[(_e12[0] | 0) * 4 + 1 + 2] * 255) << 8 | Math.round(_e12[(_e12[0] | 0) * 4 + 2 + 2] * 255);
  			var pos_ = _e12[0] + 1.;
  			_e12[0] = pos_;
  			if(_e12[0] > _e12[1] - 1) {
  				_e12[1] = _e12[0];
  			}
  			var c = Math.round(_e12[(_e12[0] | 0) * 4 + 3 + 2] * 255) << 24 | Math.round(geom_flat_f32_Float32FlatRGBA.get_red(_e12) * 255) << 16 | Math.round(_e12[(_e12[0] | 0) * 4 + 1 + 2] * 255) << 8 | Math.round(_e12[(_e12[0] | 0) * 4 + 2 + 2] * 255);
  			var pos_ = _e12[0] + 1.;
  			_e12[0] = pos_;
  			if(_e12[0] > _e12[1] - 1) {
  				_e12[1] = _e12[0];
  			}
  			return geom_obj_TriColors._new(new geom_structure_TriInt(a,b,c));
  		};
  		var _e13 = verts;
  		var _e14 = verts;
  		var tmp3 = function(pos_) {
  			_e14[0] = pos_;
  			if(_e14[0] > _e14[1] - 1) {
  				_e14[1] = _e14[0];
  			}
  			return pos_;
  		};
  		var _e15 = verts;
  		var tmp4 = function() {
  			return geom_flat_f32_Float32Flat.get_size(_e15);
  		};
  		var _e16 = verts;
  		var tmp5 = function(id) {
  			return geom_flat_f32_Float32Flat.set_size(_e16,id);
  		};
  		this.pen = new trilateral3_drawing_Pen({ triangle : function(ax_,ay_,az_,bx_,by_,bz_,cx_,cy_,cz_) {
  			return geom_flat_f32_Float32FlatTriangle.triangle(_e,ax_,ay_,az_,bx_,by_,bz_,cx_,cy_,cz_);
  		}, transform : function(m) {
  			geom_flat_f32_Float32FlatTriangle.transform(_e1,m);
  		}, transformRange : function(m,start,end) {
  			geom_flat_f32_Float32FlatTriangle.transformRange(_e2,m,start,end);
  		}, getTri3D : function() {
  			var this1 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangle.get_ax(_e3),geom_flat_f32_Float32FlatTriangle.get_ay(_e3),geom_flat_f32_Float32FlatTriangle.get_az(_e3),1.);
  			var pa = this1;
  			var this1 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangle.get_bx(_e3),geom_flat_f32_Float32FlatTriangle.get_by(_e3),geom_flat_f32_Float32FlatTriangle.get_bz(_e3),1.);
  			var pb = this1;
  			var this1 = new geom_structure_Mat1x4(geom_flat_f32_Float32FlatTriangle.get_cx(_e3),geom_flat_f32_Float32FlatTriangle.get_cy(_e3),geom_flat_f32_Float32FlatTriangle.get_cz(_e3),1.);
  			var pc = this1;
  			return new geom_structure_TriVec(pa,pb,pc);
  		}, next : function() {
  			var pos_ = _e4[0] + 1.;
  			_e4[0] = pos_;
  			if(_e4[0] > _e4[1] - 1) {
  				_e4[1] = _e4[0];
  			}
  			return _e4[0];
  		}, hasNext : function() {
  			return _e5[0] < geom_flat_f32_Float32Flat.get_size(_e5);
  		}, get_pos : function() {
  			return _e6[0];
  		}, set_pos : function(pos_) {
  			_e7[0] = pos_;
  			if(_e7[0] > _e7[1] - 1) {
  				_e7[1] = _e7[0];
  			}
  			return pos_;
  		}, get_size : function() {
  			return geom_flat_f32_Float32Flat.get_size(_e8);
  		}, set_size : function(id) {
  			return geom_flat_f32_Float32Flat.set_size(_e9,id);
  		}},{ cornerColors : tmp, colorTriangles : tmp1, getTriColors : tmp2, get_pos : function() {
  			return _e13[0];
  		}, set_pos : tmp3, get_size : tmp4, set_size : tmp5});
  		trilateral3_Trilateral.transformMatrix = this.scaleToGL();
  	}
  	,shaderAssign: function() {
  		var vertexShader = "";
  		var fragmentShader = "";
  		switch(this.shaderTest._hx_index) {
  		case 0:
  			vertexShader = "attribute vec3 pos;" + "attribute vec4 color;" + "varying vec4 vcol;" + "uniform mat4 modelViewProjection;" + "void main(void) {" + " gl_Position = modelViewProjection * vec4(pos, 1.);" + " vcol = color;" + "}";
  			fragmentShader = "precision mediump float;" + "varying vec4 vcol;" + "void main(void) {" + " gl_FragColor = vcol;" + "}";
  			break;
  		case 1:
  			vertexShader = "attribute vec3 pos;" + "attribute vec4 color;" + "varying vec4 vcol;" + "attribute vec2 aTexture;" + "varying vec2 texture;" + "uniform mat4 modelViewProjection;" + "void main(void) {" + " gl_Position = modelViewProjection * vec4( pos, 1.0);" + " texture = vec2( aTexture.x , 1.-aTexture.y );" + " vcol = color;" + "}";
  			fragmentShader = "precision mediump float;" + "uniform sampler2D image;" + "varying vec2 texture;" + "varying vec4 vcol;" + "void main(void) {" + "float bound =   step( texture.s, 1. ) *" + "step( texture.t, 1. ) *" + " ( 1. - step( texture.s, 0. ) ) * " + " ( 1. - step( texture.t, 0. ) );" + "gl_FragColor = texture2D( image, vec2( texture.s, texture.t ) );" + "}";
  			break;
  		}
  		this.setupProgram(vertexShader,fragmentShader);
  	}
  	,loadImages: function(onLoaded) {
  		this.imageLoader = new htmlHelper_tools_ImageLoader([],onLoaded);
  		this.imageLoader.loadEncoded(["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV8AAAHfCAYAAAD3BdtZAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deZxkZX3v8e9zqrp7FmYDUdldWFxjcCAieGUUBKa7q6cb0u5GMFdibnIjSfQa40IbjZooaDDRqJEEE3NzM5GZ6ZqeCYYkAwYXlogKqAwigrIoy2xMz3RXnd/9o/sM1dWnqs7yLGf5vl+vvF4X7K7nidd8/PGbqjpq5hvLToU364G0E1/NDJw5833X9yBK4uA3+l+sPOl3fY8imn2kz1cz/7lkp+yvDKgl/n1qiVSh/FOg1OGuL1cgdyhRn6i8/MA/KAXf9WWIupF/RqV57JI3CeT/QOGFru9TGIKHZbf34+bDfX7zp33PwiPVA6pxZ/UG/8cDr1zwcxU8oJb496l+30MVzwXwTEdXLhJGmDKL0dWsPbZ7Kse1/sv+Q5Ublf+w+mbj5mVndH0dxlgnRpgyg9HVpEds2/k7+7+lZDcenb1h+eEAVORzGGMdGGFyhtFNKWZs2/jNuwZ2KdkDmb1tyT3YWzkx8T0Y4zTmIvyzA19Rr0XT9WWo2BjdhNLFdqFptbN5b/9JSvZAmg9Ub2zf+6a6J2Mcn+BOBfXnjDCZwOjGpDO2bfyHKjfK49VXKtkDkf3qW732vmkwxjEwwqQRoxuRwdi283f2f0tm1BlK9kAgeCzu3jcNxjgCRphSYHR7sBjbNn7zroFdEBw+F18Aafe+aTDGXTDCFAOj24G72C40v+8FgEPx1b33TYMxDsEIUxeMbpusxLZNsO8FWuJreu+bBmPcghGmFozuvIzGtl2w7wVa4mt775sGYwxGuORKH10fD8ke796sx7bNoX0v0BpfuN37plHqGDPCpVLa6OYztgvItHe3f2/fycFfL4hvlva+aZQyxoxwoZUuugWIbTt5uO8G/zHv7OCvF8Q3y3vfNEoVY0a4UEoT3QLGtl3rvhdoi2+e9r5plCLGjHCuFT66JYhtG79518BuCNYEf2NhfJHfvW8aC2JcwXOgcJTrO2nDCOdKYaNbvtgu0L7vBULiW5S9bxqFjDEjnGmFi27JY9uufd8LhMRXptW3Gt8u3t43jULFmBHOlMJEl7Htqn3fC4TEF8DjszcsXw0Bn+vWQSFizAg7lfvoMrZxLNr3AuHxReO/l+yUPZWT7N0t33IdY0bYqtxGl7FNLGzfC3SIL/e+6eQyxoywUbmLLmOrTdi+F+gQX+599cpVjBlhrXITXcbWmLB9L9AhvuDe16hcxJgRTiXz0WVsbQnd9wKd48u9r0WZjjEjHEtmo8vYOtFp3wt0iS/3vu5kMsaMcFeZiy5jmwmd9r1Al/hy75sdmYoxI7xAZqLL2GZSp30v0CW+4N43szIR45JH2Hl0Gds86LjvBbrHl3vfnHAa45JF2Fl0Gdvc6bbvBXrEl3vffHIS44JH2Hp0Gdvc67bvBXrEl3vfYrAa44JF2Fp0GdvC6bbvBXrEF9z7FpKVGOc8wsajy9gWXdd9L9A7vtz7loDRGOcswsaiy9iWSq99LxAhvtz7lo+RGGc8wtqjy9iWWq99LxAhvtz7ktYYZyzC2qLL2FKLXvteIEJ8wb0vtdESY8cRPhRdJe8B8ILYL8DYUmc9971AtPhy70tdpYqx5Qgnji5jSxFF2fcCEePLvS/FkSjGhiMcO7qMLSUUZd8LRIwv976URqwYa45w5OgytqRJlH0vEDG+4N6XNIoU45QR7hldxpbMiLTvBaLHl3tfMqZrjGNGuGN0GVuyIOq+F4gRX+59yZbQGPeI8KLoMrbkQNR9LxAjvtz7kisLYlxFQ4m6OojwoegK3iZ7VJWxJZei7nuBGPGF4InZG5evhkCluh1ROk30y92oqO/Jzv6t/ixq/n71Ynm0ejIEFdeXo1KT5l0Du6LsewHE+AM0hTVqRfOexNci0qOCGfV87FbHNnepL/k/rx4jv6w+n+El12Ta2xk1vECc+AJQRzYein8lIs1m1E2Nnf1nQKFfrW6eoapyk+srEWF3JVYfY8XXe1qzP95tiDQLwov5SVehwgBTFsheNRDn5+NNvkvlZCj48a5EpEl7eAMMMLnny6w6Jc4vxP3QxOFqRfPHMX+HKL1O4Q0wwOSQTHv3xNn3AvHjy70v2dcrvAEGmFyJue8FEsSXe1+yKmp4AwwwORB33wskmXy59yVb4oY3wACTXbH3vUCC+IJ7X7IhaXgDDDBZkmTfCySLL/e+ZFba8AYYYLIhwb4XSBhf7n3JGF3hDTDAZFiSfS+QdPLl3pdM0B3eAANM5iTa9wIJ4wvufUk3U+ENMMBkQNJ9L5A8vtz7kj4HPLPhDTDApFvCfS+QIr7c+5IWB7ybGj/uMx/eAANMGiXd9wJpJl/ufSkt2+ENMMCkR+J9L5AivuDel9JwFd4AA0wppdn3Auniy70vJeM6vAEGmNJIse8FUsaXe1+KLSvhDTDAlFCafS+QdvLl3pfiyFp4AwwwxZdq3wukjC+496WoshreAANMMaTd9wLp48u9L/WW9fAGGGCKKuW+F9AQX+59qau8hDfAAFMEafe9gI7Jl3tf6iRv4Q0wwNRd6n0voCG+4N6XwuQ1vAEGmDrwNex7AT3x5d6XFsp7eAMMMIVQu9LvewFN8eXelw4pSngDDDC18feoJTpeR8/ky70vAcULb4ABpqf4aKqTdbyQlviCe18qangDDDBB374X0Bdf7n3LrOjhDTDApadr3wtojC/3viVVlvAGGOBS07XvBXROvtz7lk/ZwhtggMtK274X0BhfcO9bLmUNb4ABLh2d+15Ab3y59y2Lsoc3wACXis59L6A5vtz7lgDDuxADXBo6972A7smXe99iY3jDMcBloHXfC2iOL7j3LS6GtzsGuNB073sB/fHl3reIGN5oGODC0r3vBQzEl3vfgmF442GAC0n3vhcwMfly71scDG8yDHDRaN/3AgbiC+59i4HhTScIcAUMcM6Z2PcCZuLLvW/eMbx6KFTUmgYDnHMm9r2Aofhy75tjDK9eDHDumdj3AnPx3af7RdUSORHg3jd3GF4zGOA889FQJxp43X0eBH+h/WUVnqZWcu+bKwyvWQxwLvnT3j0AjtD+woJPewCuBLBH92tz75sjDK8dDHDuGNr37vJnKld4ahUeh+Azul+de9+cYHjtYoBzxci+V/CXa3bctyv4Azft0y/f75sDDK8bDHBemHh/7y5/pnIFMP9uB0PTL9/vm2UMr1sMcOYZeX/v/NQLLHyrmf7pl3vfbGJ4s4EBzjQD+95DUy/QEl8T0y/3vhnE8GYLA5xZ2ve9LVMvsPhDFlqnX+59M4bhzSYGOIt073sXTL1AW3wNTL/c+2YFw5ttDHCmGNj3fqZ16gXCP16sd/rl3tc9hjcfGODM0Lzv3eUfrFzZ/jcXxVf39Fvh3tetaYY3VxjgTNC871009QKdvljHxycBLPrhRJbKKdz7OjLt3dS4l+HNHQbYNZ373tCpF+gQX7UGuyD4S02Hr1Erm/doei2KiuHNNwbYGc373tCpF+j2lZI+roCm6bfCva9dDG8xMMBOaNz3dpx6gS7x1Tn9qiOaAzpehyJgeIuFAbZO476349QL9PoydV3TL/e+djC8xcQA26Rr39t16gV6xFfj9Mu9r2kMb7ExwFZo3Pd2nXqBKI8R0jT9cu9rEMNbDgywcZr2vT2nXiBCfHVNv9z7GsLwlgsDbJSmfW/PqReI+gBNHdMv9776MbzlxACbomPfG2nqBSLGV9P0y72vTgxvuTHA2mna90aaeoE4j47XMP1y76sJw0sAA6yZhn1v5KkXiBFfHdMv974aMLzUigHWRsO+N/LUC8SZfIH00y/3vukwvBSGAdYh7b431tQLxIyvhumXe9+kGF7qhgFORcO+N9bUC8SdfIHU0y/3vgkwvBQFA5xYyn1v7KkXSBDftNMv974xMbwUBwOcSMp9b+ypF0gy+QLppl/ufaNjeCkJBjiuNPveRFMvkDC+Kadf7n2jYHgpDQY4spT73kRTL5B08gVSTb/c+/bA8JIODHAkKfa9iadeIEV800y/3Pt2wfCSTgxwTyn2vYmnXiDN5Askn3659w3H8JIJDHA3Sfe9qaZeIGV8U0y/3Pu2Y3jJJAY4VIp9b6qpF0g7+QKJp1/ufVswvGQDA7xIwn1v6qkX0BDfpNMv977zGF6yiQFeIOG+N/XUC+iYfIFk0y/3vgwvucEAB5Lse7VMvYCm+Cacfsu992V4ySUGGLLf2xl/36uu0jH1AromXyDR9FvavS/DS1lQ9gDvrjwc8zd2NZtVLVMvoDG+SabfUu59GV7KkhIH2N8Xd9+rrjr8+nt36zpf3+QLxJ9+y7b3ZXgpi8oZYB+zsfa9WqdeQHN8E0y/5dn7MryUZSULcPx9r96pF9A9+QKxp99S7H0ZXsqDMgU43r5X+9QLGIhv3Om38HtfhpfypCQBjrfv1T/1AiYmXyDe9FvkvS/DS3lU/ADH2fcamXoBQ/GNOf0Wc+/L8FKeFTjA8fa9ZqZewNTkC8Safgu392V4qQiKGuDo+15jUy9gML5xpt9C7X0ZXiqSAgY4+r7X3NQLmJx8gejTb1H2vgwvFVGxAhx132t06gUMxzfG9Jv/vS/DS0VWkABH3/eanXoB05MvEHn6zfXel+GlMihCgKPte41PvYCF+EadfnO792V4qUxyHuBo+17zUy9gY/IFok2/edz7HvT+i+Gl0slvgKPse61MvYCl+M5Pv5/p8WP52vse9P6rcU/fmWB4qYxyGOBo+147Uy9ga/IFAB9Xosf0m5u971PhtffvH1HW5C3Avfe91qZewGI8oky/udj7MrxET8lRgHvve+1NvYDtgPSafrO+92V4iRbLR4B77XutTr2A5YhEmH6zu/dleIk6y3iAe+977U69gIuQ9Jh+M7n3ZXiJestygLvve61PvYCDmPSafjO392V4iaLLaIC773vtT72Aq6B0m36ztPdleIniy16Au+17nUy9gKOo9Jh+s7H3ZXiJkstQgLvve91MvYDLsHSZfp3vfRleovSyEuDO+15nUy/gMC7dpl+ne1+Gl0ifDAS4877X3dQLuA5Mp+nX1d6X4SXSz22AO+17n3A59QKOI9Nl+rW/92V4icxxFOCO+17lduoFshCaDtOv1b0vw0tknosAh+97n2g2qp+ydocOnMem0/Rrbe/L8BLZYznAofveDEy9QFaCEzb92tj7MrxE9tkLcNi+NxNTL5CR6HSYfs3ufRleIncsBDh035uRqRfIUnhCpl9je1+Gl8g90wFevO/NzNQLZCg+YdOvkb0vw0uUHQYDvGjfm6GpF8hagNqnX917X4aXKHvMBLh935upqRfIWIRCpl99e1+Glyi7NAd40b43Y1MvkMUQtU2/Wva+DC9R9ukM8MJ9b+amXiCDMWqfflPvfRleovzQFOAF+94MTr1AVoPUOv2m2fsyvET5kz7ArfveTE69QEaj1Db9Jtv7MrxE+ZUiwAv2vRmdeoEsh6ll+o2992V4ifIvaYCf2vdmduoFMhyn1uk31t6X4SUqjgQBPrTvzfDUC2Q9UMH0G3Xvy/ASFU+8AAf73kxPvUDGI9Uy/fbe+zK8RMUVMcCH9r0Zn3qBPIRqfvrtuvdleImKL0qA5/a9mZ96gRzEKph+O+59GV6i8ugRYH+fWpKHqRfIS7B8XIml8sxFe1+Gl6h8OgfYx6x6Rh6mXiAn0Zqffv9+wd6X4SUqr5AAy35vJ6CuycPUC+QpXD6uVGv8+wAwvES0OMB7vZ/mZeoFchQvtQa7VEN9jeElokNaAix96rq8TL1AzgLmP6xu9e/vezpydm8iMkihopY2j1Qz/q2urxJHriKm1shbsLrxdFWVH7i+CxFlg/+k+kHj3r5nyHTlza7vEkdu4it7cbZMey+CYLU6vHkUA0xE/pPqB/59fUcDapV48uK95x33Std3iio38UUTH/R/Xp37mjgGmKj0WsMLAGqJf4qv8AHX94oqF/GVvTgbTXWMHFRPPRaEASYqrfbwAgAU1iiF4/My/eYivhBcLk8segw0A0xUQqHhDVTlIV/JBx1cK7bMx1f24mwAr2re37ck/AcYYKKy6BpeADIgA4A6Jw/Tb+bjC8HlAPxD+97wn2GAiQrO36/u6hZeYG7vC8DPw/Sb6fgGUy9m1c4F+97QH8ZqtaZ5NANMVDz+fnWX/5O+Y7qFF0Cw970HUOfsXX/s2Zaul0im4wvBBACE7nvDrWKAiYolcngDVXkIAESQ6ek3s/GVvVgHYB0AdNz3hmOAiQoidngR7H0BEfXqLE+/mY3v/K4X6LXvDccAE+VckvACT+19gWxPv5mMb+vUG2nfG44BJsqppOEF0LL3zfb0m8n4tky9cfa9YRhgopxJFd7A/N4XyO70m7n4Lph6EXvfG4YBJsoJLeHFU3tfILvTb+bi2zr1Itm+NwwDTJRxusILLNz7AtmcfjMV3/apN8W+NwwDTJRROsMLYMHeF8jm9Jup+ELwkQV/mW7fG4YBJsoY7eENtOx9AUB87/JOP+pCZuIre/EqAGe1/j0N+94wcwHuk7sMvDYRxWAsvFi49wUAgbwqS9NvZuILwYfb/o6ufW+YVWp18xgGmMgdk+EFFu99gWxNv5mIb9jUq3nfG4YBJnLEdHgBLNr7AtmafjMR35Cp18S+NwwDTGSZlfAG2va+QHamX+fxDZ16YWzfG4YBJrLEanixeO8LZGf6dR7fsKkXZve9YRhgIsNshxcI3/sCgPhqwtYdOnEa305Tr4V9bxgGmMgQF+EFELr3BQAB1j1xwbHrrN6ljdvJN3zqtbXvDcMAE2kmT6o7nYQ3ELL3BYCKKKe7X2fx7Tj1wuq+NwwDTKSJPKnubN7Xd6yz8ALAEgntievp193k22Hqhf19bxgGmCilTIQXAAb8kxGy9wXcTr9O4it78Wp0mHod7XvDMMBECWUmvACgsAYhe1/A7fTrZvIV/EnHf8ndvjcMA0wUU6bCO0912PsC7qZf6/HtOvUCaD7gdN8bhgEmiiiL4QXQce8LuJt+7U++XaZeAL7/QPUUa3eJjgEm6iGz4QW67n0BwIP6SKd/zRSr8e019aKh7pYZtdrejWJhgIk6mAtv/3GZDC/Qde8LABCc9cT5x7zK4o0sT77dp17I45VHbF0lIQaYqM1T4cVK13fpptveFwA85XV6B5YR1uLbc+pFJve9YRhgonl5CS+ArntfANanX3uTb+f39Qayuu8Ns0qtbh7j9cudri9C5Equwgv03PsCdqdfK/GVfTgHwJldfyjb+94wq7CqeSwDTGWUu/ACvfe+gNXp187k63ff9QK52PeGYYCpdHIZ3nm99r6AvenXeHwjTb3Izb43DANMpZHn8ALovfcFrE2/5iffCFMv8rXvDcMAU+HlPrxApL0vYGf6NRrfqFNvDve9YRhgKqxChBeItvcFAMFZu8474dUmr2J28o029eZ13xtmFVY1j2OAqUgKE955Ufa+AKA8P1K/kjIW38hTL3K97w2zkgGmovALFl4A0fa+gPHp19zkG3HqRf73vWEYYMo9/0l1p1+08AKR976A2enXSHxlH85FxKm3IPveMAww5VZhwwtE3/sCRqdfM5Ovjw9F/dEC7XvDMMCUO4UO77yoe1/A3PSrPb6xpl4Ubt8bhgGm3ChDeAFE3/sCxqZf/ZNvjKkXxdz3hmGAKfNKE14g1t4XAJRqan/fr9b4xp16C7zvDcMAU2aVKrxAvL3v3C+cueuC48/ReQW9k2+8qbfo+94wDDBlTunCOy/O3hcAlOjd/WqLb+ypF6XY94ZhgCkzyhpeAMBAjL0vAN3Tr77JN/r7eg/9Rkn2vWEYYHKu1OEFgCXx9r6A3ulXS3xlF14D4OWxfqlc+94wK7GqeZwwwORA6cMLAAprlFI7Y/6StulXz+Trxdv1AqXc94ZZWWGAyTKGt0Wf/3DcX9E1/aaOb6KpF6Xd94ZhgMkahrdNf9y9LwCoM3edf/y5aY9OP/kmmHpR7n1vGAaYjGN4QyTY+wKAgp+kewukim/SqZf73lAMMBnD8HaQaO8L6Jh+002+yaZeyGPc93bAAJN2DG8PCfa+QPrpN3F8E0+9ABr39y1Nem4JMMCkDcMbQaK9L5B2+k0++SacegE0/Z9Vn5f43HJggCk1hjeihHtfIN30myi+sgvnIeHUi4baiVnF/zD0xgBTYrJP3cHwRpR47wukmX6TTb4eJhL9HrjvjYkBpthkn7qj+dP+48HwRpdw7wskn35jxzfV1AvuexNggCkyhjehxHtfAFBn7jrv+NfE/a34k2+KqRfc9ybFAFNPDG8KKfa+AKBU/D8DixXftFMv972pMMDUEcObUqq9LwDIy+NOv/Em33RTL/e96THAtAjDq0mKvS8Qf/qNHN/UUy+479WEAaZDGF6NUu19gbjTb/TJN+XUC+57dWKAKQjvCWB49Ui59wXiTb+R4iu7cT5STr3c92rHAJdYS3hXuL5LYaTe+wJxpt9ok69KPfVy32vGysqq5nGqT+5wfRGyh+E1KOXeF4g+/faM7/zUe0baC3Hfa8xKtbp5PANcDgyvYan3vgAgL9/1muPO6/VTvSdfDVMvuO81jQEuAYbXAg17XwBQnpro9TNd46tr6uW+1woGuMAYXku07H2BKNNv98lXz9TLfa89DHABMbx2+Rr2vkDv6bdjfLVNveC+1zIGuEAYXvs8LXtfoNf023ny1TT1gvteF1aqVc0TGOB8Y3gdWeKfAg17X6D79BsaX9mNC6Bp6uW+1xGFFQxwfjG8DimsVpC79bxY5+k3fPJVuFzPwdz3OsUA55L/ZIXhdczvh7ZudXrf76L4ap16wX2vcwxwrsieynf9+6rPBsPrlL69LwCFM3ZfcNz5i84I+UFtUy+4780GBjgXZE/lu80HqicCWO76LqWnce8LAPAX/xnagvjqnnq5780QBjjTGN6M0br3Rej067X9gM6pl/verGGAM4nhzSade9+5F1w4/R6Kr/apF9z3ZhIDnCkMb3Zp3fsCi6ZfDwBEoKDwYa0Hcd+bXQxwJvj7GN5M0733BRZMv3OT7x5cAOA0rYdw35ttDLBT/r7Kd/2fMryZpnvvO/eaZ+w+/9gLAMATgYKnferlvjcP5gMs/QywTQxvfmjf+wKAqMsBwMMeXADBWt2v3+S+Nx8UVlRWNZ+Nfvmu66uUAcObL9r3vsCh6deDwvu0vzjg+w9y35sjy71VzRMZYLMY3hwysfcFAKj3eQDO0v66DfUjOch9b84wwAYxvDllYu875xXRn14cgzxW+YWJ1yXjGGADGN58M7L3RZxHx8fAfW+uMcAaMbz5Z2TvCzPxbTb5/t68W+6tap4oAwxwGgxvQRja++qPb0Pdzff3FsLyykoGOCmGt0AM7X21x5f73kJhgBNgeIvHxN5Xe3y57y0cBjgGhreYTOx9dceX+95iYoAjkL3e7QxvQRnY++qNL/e9RcYAdyF7vdub9/edBIa3mAzsfbXGl/vewmOAQzC85eD36d37ao0v972lwAC3YHjLw1siWvumM77c95YHAwyGt3QG5HkAmrpeTl98ue8tm1IHmOEtISUroWSnrpfTFl/ue0uplAFmeMtLqvr2vtriy31vaS2vrGyeiAG53fVFbGB4y03n3ldXfLnvLbfl3srmSUUPMMNLOve+euLLfS8VPMAMLwHQuvfVEl/ue2leIQPM8FIrXXtfLfHlvpdaFCrADC+107X31RFf7nupXSECzPBSKE173/Tx5b6XwuU6wAwvdaRp75s6vtz3Uhe5DDDDS73o2Pumji/3vdRDrgLM8FIUOva+aePLfS9FkYsAM7wUmYa9b6r4Cve9FF2mA8zwUiwa9r6p4us/yn0vxZLJAPt7GF6KL+3eN1187+9blub3qZQyFWB/j3e7PNB3Mhheiint3jdNfJv+z6unpDmcSisTAQ7CKwCHCIov5d43cXy576WUnAaY4aXUUu59E8eX+17SwEmAGV7SJc3eN3l8ue8lPawGmOElndLsfZPGl/te0mm5t7J5khgOMMNL2qXY+yaKL/e9ZMDyysrmyaYCzPCSESn2voniy30vGbLMRIAZXjIp6d43WXy57yVztAaY4SXTku59k8SX+14yTUuAGV6yIuHeN3Z8ue8lS1IFmOEla5SsVB7ujvtrsePLfS9ZlCjADC/Z5lckdhfjx5f7XrIrVoAZXnIhyd43bny57yUXIgWY4SVnEux9Y8WX+15yqGuAGV5yKsHeN1Z8ue8lx0IDzPBSFsTd+8aLL/e95N6CAMse7zsML2VB3L1vnPg2/Z9VT455HyITllUOaz5HZtR1zZ/1ncjwUiYMyMmIsfetRv1Baai70VDPT3QporQEs/JE5YeNX1Qfxz7vQcyoL664+uH/nP7Q014l4r/d3+8dLXsqh8uTledBpM/1damElKxWHn4gPiJ1UskeSJQfbD5cvaFx47Kz092OKKLW2D5WWSGz6hQo3Okp9b7Dvvzg9e0/fuBjR5zrQz4K4AXSVD+SPWovY0y2+bsqN6hZFamTkeM7e/PSW/z7+k5PdzWiDsJiGzxXTeHmTtFt1xLh4D+rTzLGZM0B72bZ6/1alB+NGt/mwU0rnuTbzEibbrENxIhuu5AIBxhjMkfUHnm0shxApdePRoqvNNQPZq5dwX0vJRcltoEU0W3XJcIBxpj0eqwaae8bKb7c91JscWIb0BjddhEiHGCMKZWoe99I8eW+l3pKEtuAwei2ixHhAGNM8UTc+0aJL/e9tFia2AYsRrfdgY8dca4v8qdQiPSHIy0YY+ou4t63d3wb6q6D1654gc67UQ7piG3AYXTbpYhwgDGmxSLsfXvGl/vektIZ20CGottOQ4QDjDFF2vv2jG/j5qW3NLnvLT4TsQ1kOLrtNEY4wBiXUYS9b6/4Ng9eu2I/GmqF5quRayZjG8hRdNsZiHCAMS6DCHvf7vHlvrc4bMQ2kOPotjMY4VGqqqAAABhPSURBVABjXFQ99r5d48t9b47ZjG2gQNFtZyHCAca4IPzdlRvUTOe9b9f4ct+bIy5iGyhwdNtZjHCAMc4pOVi5BXtUx352iy/3vVnmMraBEkW3nYMIBxjjvOix9+0cX+57syULsQ2UOLrtHEY4wBhnmDxW/QE67H07xpf7XseyFNsAo9tRBiIcYIwzpNvet2N8ue+1LIuxDTC6kWUowgHG2KFue99O8eW+17QsxzbA6CaWwQgHGGObuux9w+PLfa9+eYhtgNHVJsMRDjDGhnXa+4bGl/teDfIU2wCja0wOIhxgjDXrtPcNjS/3vQnkMbYBRteaHEU4wBin1GnvGxZf7nujyHNsA4yuMzmMcIAxjqvD3ndxfLnvDVeE2AYY3czIcYQDjHEEYXvfRfHlvndekWIbYHQzqwARDjDGIcL2voviW9p9r69mZJf3o0LFNsDo5kaBIhxgjBG+922Pb3n2vUWObYDRza0CRjhQzhiH7H0XxrfI+94yxDbA6BZGgSMcKE2M2/e+C+JbqH1vmWJ7iPq25+H9jG7xlCDCgcLGuH3vuyC+ud73ljK2AUa3LEoU4UBhYty+922Nb772vaWObYDRLasSRjjQFmN1CkT1u75UJG1736fim/V9L2PbgtGlOSWOcCBXMW7d+x6Kb+b2vYxtCEaXwjHCh2Q6xq1730Pxdb7vZWy7YHQpGkZ4kUzFuHXvG8S3cfDaFQfQUIdZuwVjGwGjS8kwwh25jXHL3ncuvg1158FrV7zQ6KGMbQyMLunBCPdkPcbyaPUuCF6gZA+k+WD1hsZ/ad73MrYJMLpkBiMcmfEY+7sqN6hZdbaSPRAt+17GNgVGl+xghGPTH+ODlVtkjzpdyR7MJtr3MrYaMLrkBiOcWOoYi6i9eLSyTMnj6o5I+17GViNGl7KBEU4tUYzl0epdqvHD6o7Qfa+vZvzHvTuaj1T3YhdjqwejS9nECGsTKcZze9/rl97cvK/vdMbWJEaX8oER1i48xgcrt6jpz6/8bPOeJQf8X3ir0fTsvc+3BET5vgf1z4f9/UObFBY/qJQoi2QC3nT/4RdC4dcBeK7vUyTSVPtkr9rVfKR/wPVdiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiOxTG4aHJ62dJvKJLVNTXzd5RK1WW+aJ/JPJM1r5Sk3U6/X/tnVeVBcODp7Q9Ly/sXGWAn64eevW/23jrE7GarVhX+Sdrs4XYPvk1q1Xmj6nVqsd74l8yfQ5IZqV2dlLrr3uuoe6/dCGWu0qiDzL0p1ySYB/n9y69S+qAGoWD/1H02csmZ7um1myxNr/ThXgc7bOiqPheRcr4FwbZwlwzujo6BWbN2++z8Z5YV6ydu2279x66x8CWOfifAW8cnh4uL5169adRs/x/Y9DKSv//7rgXOBDvcILABB5FYAXmb9RfnlKPQ4AnuuLkBFKKfUWm+f5jcYbLJ63yMTEhK+q1UsA7HF0hf4K8FGTB4wMDp6mlHq9yTPCKOCWXfv2fcT2uUXH+BbQyMjImRB5rs0zFWAz9qE2b958n1Lqdx1e4dfHarVXGHt1z/skAGXs9cNNK5G37tixo2H53MJjfItI5DccnPr8kcHB0xycu8Dmev3vAVjb+bfzASOBHBkaGlLA2bpftyelPrhpauoH1s8tAca3YMbHx5cq4HUuzlae53z6BQBVrf42gPudHC7ysg3Dw6/V+ZLr1q2rKqU+ofM1oxDghlPXrjX+h4hlxfgWzOyBAzWIrHJxtgBvuHTt2j4XZ7favHnzLvH9twBoOrmAyMfXrVu3RNfLrVqx4mIAz9f1ehHtFaUumZiY8C2fWxqMb8EI4GLlAABQwJG/PPro812d32py27YbIfIpJ4cr9ayVhx2m5a1355133nKIfEjHa8WhRN5Tr9d/YvvcMmF8C2RwcPCZEHEav+bcxJkJM77/fgG+6+JsBfxxrVZ7WtrXWdLf//sAjtZwpcgE2L55auqvbZ5ZRoxvgfRVKm8AUHV5B6XUyOjo6GqXdwhs3779oKpU3ghg2sHxqz3gg2leYGRk5BkKeI+uC0X0BDzvfwIQy+eWDuNbJG7e5dBuCZrNi1xfIrBly5a7BHivo+PfMTY4eHLSX1a+/wEAh2m8T+8zlXrn5OTkgzbPLCvGtyDGhodfAuBXXd8DAHyRzKweAGBy69arAGyzfrBIn+95f5bkV8eGhp4P4Lc036iXf5l/qx5ZwPgWRNPuJ9q6UsAra7Xas13fo4WI570dwKMOzh4dHR4+J+4v+Up9GHZXSI/4Sv22xfNKj/EtgHXr1lWVyJtd36OF8oA3ur5Eq8nJyQeVUm93cbYAn5iYmIj8f2sjIyNnAbC6uvGV+q16ve7iv5xKi/EtgNUrVrwGwDNc36OVEnmr6zu021yvb1bA1Q6OPvX2W26J+l9GSvn+J43epo0o9Q/1en2LzTOJ8S0EycYftC0gwEm1Wu101/dot39m5vcA3G37XFHqY7VabVmvnxsZGhoDcIaFKwUeGJiedvl9GKXF+Obc/Nu6Rl3fI4yXgS/bafe1r33tSfH9N0GpWctHH6t6fN/wpWvX9imlPmbrQgAEIm/beP31uy2eSfMY35yTZvPXAWj7KKtOIvL6LHzcuN3ktm23KhGjX/8YRgHvHRwcfGanf/2Ro49+O4DEb01L4PNbpqaut3getWB88y6DK4eAAo585KijLnB9jzDz30/7TcvHrqhWKqEfvFi/fv1KEZmwdREF7JyemXmXrfNoMcY3x0bXr38uAHPfH6uB5S91j2zHjh2N6tw7RPbaPFeJXFqr1V7Y/vf7qtV3KeBIS9doisjFX/va1560dB6FYHxzzK9U3gz7X64di4jUsvJx43ZfnZq6Vyn1+5aPrXjAgg9eXLh+/bFKxNoUKkp9esvU1DdsnUfhGN/8UkrkYteXiGCJ32iMu75EJ5vr9S8ppTZaPVRkaGRk5DXBXzbnVhFLLZ1+x2yj8T5LZ1EXjG9OjdVqZ0GpZ7m+RxRZeMRQN03gf0Gp3g+H1Mn3PzExMeGNDQ29CMDbrJyp1Kx43m9s3779oJXzqCun34BFyfkZ/oO2EK+4aGjoOV+dmrrX9UXC1Ov1R0dGRt6qRK6DpTWOAl5y+223/Yav1EUKqFg5U+SjW+r179g4y5KP9y9dernrSyTQBBjfXBofH186Mz3t5FFBCalZpd4IILNPwJ2cnPy3DcPDnwfwDltnisgVCjjc0nHf61u61Prb64xSyt+4ceOM62skxbVDDs1MT48AWOn6HnF4c0/YyPQfDs40m5dBqe9bPNJWeA94Iq/Pc6iKiPHNpzytHADMfdx4w+Dgr7m+Rzfbt28/6Pn+GwEccH0XnQTgE4gziPHNmflPSJ3n+h6JZOTpxt1smpq6Q1I+gSJTlLrxpaeddoXra9BijG/OVD3vjcjvrv4N4+Pj/a4v0ctLTzvtCgX8h+t7aLDXBy7mE4izifHNGQ94k+EjGgZf+/DGgQOZn9onJib8xtxq53HXd0lFqT/iE4izi/HNkbHh4ZcI8FKDRzQAXGbw9eHn44Mh2Lp168+VUpe6vkdSAmzfUq9/zvU9qDOr//iqlPrshlrtSpNnzIhk+k/U0xDTf9Cm1Ncbvv+PVaU+DXP/2aiNjY0dsWnTpscMvb42m+v1r47Uav+QsaeERPGED7wdfAJxptneHa6B8D8PSaxbt64qgOkIbJ6amnpiZHj4W8rcF/b0y8zMRQC+YOj1tRqYnv7dmYGBV+Tl04TzLtu6devPXV+CuuPaISdWHXbYeQCebvAI8YHN8/9vo0/69TP6TWdhNl5//W6Z+wKjpuu7RPTVLVu3ftn1Jai3vP6peRkZXTko4Dv1ev1+AKgA23zA2KehFHDW6Pr1z928ffuPTZ2h0+Tk5E2jw8N/LsB7Xd+lh0f6m83yPIFY5LKR4WEnD0WNQwHvCvsvRMY3B0ZHR1dLo7HB5Bmi1KEHKG7auvV7G4aHfwbgWEPHKalW3wTgTwy9vna79u374KrDDjsHQGY/KOIr9Vsbt2//pet7WLRMAT2fi+ecUqHfWMe1Qw7MfyWj0UcFiVKbW/9SlDK6eoDIW5Dxjxu32rFjR8NX6q0A9ru+Swdf4ROI84XxzQfT73L48eTk5Pda/5YY3vsCOHFseNjmU3pTq9frP4RS73Z9jxAP9B848DuuL0HxML4ZN7p+/XMVcJbJM+SpP2g75ODBg9fD8HccNHP0B2+B+ffO1l3fo4WI5/0mn0CcP4xv1lUqxv/xXPn+on9cnX++141GzxV53fr16wdMnmGA9DebvwngYdcXAQCIfGFycvLfXF+D4mN8s02JyFsNn/HwqaefflPYv2Bh9XD4QLW63vAZ2m3cvv2X4vuXwP2HGO6Znp39Q8d3oIQY3wzbMDRk/M39IjLV6YtX+kRs/ON17lYPADC5bdu/Avhnh1cQBbyDTyDOL8Y3yyzsRCuet2jfG5h/7M/dJs8XkeGxsbEjTJ5hwvr161dC5GUOr+A3lWJ4c4zxzaharbYMgOlHBe090Gh03Rcaf8sZ0N+cnc3s0407GahWr3L8keOKJ/KP4+Pjhzm8A6XA+GaU8n0bjwq6rueTbM3HN/NPN243WqtdZGEXH8WzZ6enP+b6EpQM45tRysLKIewtZu0GBgZuALDX8FXOHBscPNnwGVqMjY093RfJzFc1CvA7o7Va5r8jmRZjfDPowvPPPwrmHxU0M3DgwNZePzT/0MV/N3wXyNwTOjLPn539vAKOdH2PFkpEvjAyMrLC9UUoHsY3g/xq1fijgpTIDVHfmG/hLWcQpd6MjH/ceGRo6PUARl3fI8QJEPmk60tQPIxvBtn4ysXWL9LpyfOmYPo9rSLP3TA09HKjZ6Rw4fr1xyqlMrNuaKdE3j5aq+XuPdNlxvhmzNjw8EsU8BLDx0gzwr43MDk5+SCA7xq8z5wMf9y4Ual8DsBq1/foQonIF4eGhta4vghFw/hmjPFHBQFQwK2xn3Rg4V0PADL5ceMNw8OXKGDY9T0iOKaqFB8TnxOMb4ZcunZtn4VHBUFEIk+9h/j+lIGrtFvT53lDFs6JrFarHQ/g067vEcMlG4aHx1xfgnpjfDPk4Wc+0/SjguZUq7Hj279s2bcBGH/opY232MWgKiJ/C/Pvt9ZLqb8aP//8w11fg7qz+yQLpR6CiOn3jHoATjR8hhGWwvOjLVu23BX3lzZu3NjcMDx8HQDTbwkbrNVqT6vX648aPqenDbXab4vIq13fIzaRo2b6+q6ChX+KouSsxld8/w8mp6b+yeQZ4+eeu2pmyZJdJs8wwcajggBAgMRPOxBgmzIf334PeC2Azxo+p6vh4eGTIPIJl3dI6U2jtdqmzfX6V11fhMLxGW5ZMTv7Wihl9FFBAFCJ8S6HdgOzs9tn+vqacy9j0NwjhpzFd3x8vDIzPf13yMPzwbrwRT43Njb29U2bNv3C9V2MEPk73/M+7/oavVSr1XtD/77ti1A4X6k3WviEwSMvOe20b2/a2vODbaE2Xnfd4xuGh28BYPrxPy+7aGjoOfPfqmbd7P79l0GpM12crZMCjmzOzHwG5r+gyQ3Pe7Ber3/L9TWSYnwzYHR09FnSaLzSwlHV79x663UbhlO9a+o4XZfpQjU8781w8HTjsaGhF/lK/antc01RSr12tFb76uZ63eV3D1MIxjcLGo2LYeejtUcAONfCOenNPSniw7D4tIhL167t+4VS1wDI3HuN0xCRzw4ODt64bdu2bDz6iADwrWZZYONRQfmj1LPGajWjDw5t9/BRR71HgJfaPNOSI/o87wuuL0ELMb6O2XhUUF41LX7P7+jQ0FoFXG7rPAdqo0NDfOtZhjC+rill/OPEeaVExm183Hh8fLxflLoaBV/Dief95YXr1x/r+h40h/F1aP5RQa91fY8MWzNQrRr/ToWD09PvBfArps9p8zPL5wEiq5qVymesn0uhGF+HLD0qKN983+jqYcPg4MsU8H6TZ4T4idfXtxZKPWT5XAAYHRkaepuDc6kN4+sSVw49iecN1mq1p5l47fHx8aXwvGtgf93wh/MffPig5XMBAEqpT81/YRA5xPg6cuH55x+lzD8qKP9E+jwRIx8SmJ2e/giAU0y8dkdK/euWrVs3AcCpa9deDaVutXr+nJWeyNXI+JNDiq7Qf8CQZfOPCjL7Md2imPvCob/S+ZJjtdrZvshlOl8zgoNNkd8L/mJiYsIfGRm5TIl8HfZDeM6GWu3SLfV65j+e25HIGzYMD/+a62skxfg6Ikpd4voOuSHyslqt9rx6vf5DHS83MjKywvf9v4Xtf/IT+czWqamdrX9rcnLypg3Dw9cCuMjqXebuc8Xo+vXXb96+/cfWz9bj2fP/k0tcOzgwOjj4qwBe6PoeeVIReZO2FxP5M9j/P9oHpVIJ/bi0r9S7ARywfB8AWC7V6hcnJibYAQf4b7oDwj9oi03mPnCR+h/NR2u19UrkHRquFIsSec/k5GTod1nX6/WfKOBTtu8EABB51e233PI7Ts4uOcbXskvXru2DUvqmuPI4YcPQ0CvSvMDQ0NAaEfkiLO9XBbhh89TUV7r9TN/SpR919NYziFIfHx4ePsnF2WXG+Fpm7VFBRZTySR9V4EoAx2i6TVRNz/cvQ48vCNq4ceM+iLzP0p3aLasA14yPj/MPgC1ifO3jyiG5142Pjy9N8osjQ0MXQqmLNd+nN5HPb9627fYoP3rqaaddo4BbTF+pg5cfnJ5+p6OzS4nxtWh0dHS1UmrE9T1ybOXB/ftjf9x4bGzs6VDqr01cqIdHGzE+PTcxMeHL3NvfrH2NZisFfLRWq/EPgi1hfG2anX0tAOOPCiqyJA8Z9Wdnr1LAkSbu05VS75+amnoizq9smZr6hohsNHWlHgY84EtcP9jB+FokXDmkp9QF4+vXRw7phuHh18HNY3RuPnXt2i8m+UVVrb4LwH7N94lG5GUzBw6828nZJcMPWVhSq9WeDRE7zwVTagq+/2krZwEQkaryvM2w8QQIkb6ZanUcER6wOTg4+Exo/mRcROIBl01MTPhJfnnLli0PbBga+hSUcvMHcCITGwYHp7Zs2/Z9J+eXBONrief7F0MpO29xEvnSlqmp662cNW/D8PAOAOfbOEuJXIwI8Z1/esMRxi/URin15U31+jfTvEb/smUfn5mevgTA0ZquFccAPO+aS9eufdkXbrtt1sH5pcC1gx0KStl6VNB+X6nrLJ11iBKZsnWWAKfXarXndfuZ0VrtYgA1OzdqodRuX6n3pH2ZjRs37hORP9ZxpYROfeToo9/r8PzCY3wtGBkc/B8ATrB03PX1et36vrDpecmeR5+Q5/sdH4lTq9WOF8Da2qWViPzJ5OTkIzpea3Jq6ssAbtbxWomIfGB0aGits/MLjvG1weLHiUVki62zWtXr9Z8A0PLFN5Eo9eYO30mgPJGrIbLK2l2eutP39+zbd5XGVxQPcPbWMwBVUerq8fHxfkfnFxrja1itVlumlBq3dFyj0t/vJL4AIEpZWz0AOOG7t932P9r/5ujQ0DsAnGPxHof4wGU7duxo6HzNTVu3fhPA/9P5mjH9yuz09Accnl9YjK9hFWADbD0qSKlvbNq06TErZ4UQYJvN85ptjxgaGRk5UZT6hM07tPiXer3+HyZeuNJsvhvAkyZeOwoB/qhWq53u6vyiYnwNs/neXlcrh8BRDz74dSi129Z5Sqnx4OPG4+PjFdVs/h2A5bbOb/EkKpU/MPXi127f/jOIXGHq9SOoeiLXrFu3jh8Q0ojxNWh4ePgYiFh7VFCfyGZbZ4X5wm23zULE5lvcVs5MT48AwMHp6XdCqbMsnn2IEvmzLVu2PGDyjP5lyz4O4H6TZ/Tw/FUrVkw4PL9wGF+DKkq9Abb+PVbq+1+dmrrXylnd2dz7Akq9pVarvVABH7V6bnA8sPOg7/+56XM2btw4rdx969kckXeP1WqpvtaTnsL4mjT3YQA7RwFOp97ArO9vh80/nRc53/P9/wsbn64L4Yu8a/v27QdtnLV5auorELnJxlkdeL7I3yT9ZjlaiPE1ZGRk5FRYfFSQ5/tO972Bbdu2PQylbrN4ZBVKvdjiea22TU5NTVo8T3zPexfcvfUMAE6Z2b//Tx2eXxiMryk6nznW2883T039t8XzuhJgu+s7GKfUrCfyLtvH1uv1bzn81rM5Sv1erVY7w+kdCuD/A5bntM3+Fqp2AAAAAElFTkSuQmCC"],["haxelogo"]);
  	}
  	,loaded: function() {
  		var haxeLogo = js_Boot.__cast(this.imageLoader.images.h["haxelogo"] , Image);
  		this.addImage(haxeLogo);
  		this.drawShapes();
  		var this1 = this.textPos;
  		var tri = this.verts;
  		this1[0] = 0;
  		if(this1[0] > this1[1] - 1) {
  			this1[1] = this1[0];
  		}
  		tri[0] = 0;
  		if(tri[0] > tri[1] - 1) {
  			tri[1] = tri[0];
  		}
  		var _g = 0;
  		var _g1 = geom_flat_f32_Float32Flat.get_size(tri);
  		while(_g < _g1) {
  			var i = _g++;
  			geom_flat_f32_Float32FlatTriangleXY.set_ax(this1,geom_flat_f32_Float32FlatTriangle.get_ax(tri));
  			geom_flat_f32_Float32FlatTriangleXY.set_ay(this1,geom_flat_f32_Float32FlatTriangle.get_ay(tri));
  			geom_flat_f32_Float32FlatTriangleXY.set_bx(this1,geom_flat_f32_Float32FlatTriangle.get_bx(tri));
  			geom_flat_f32_Float32FlatTriangleXY.set_by(this1,geom_flat_f32_Float32FlatTriangle.get_by(tri));
  			geom_flat_f32_Float32FlatTriangleXY.set_cx(this1,geom_flat_f32_Float32FlatTriangle.get_cx(tri));
  			geom_flat_f32_Float32FlatTriangleXY.set_cy(this1,geom_flat_f32_Float32FlatTriangle.get_cy(tri));
  			(function(_e) {
  				return function() {
  					var pos_ = _e[0][0] + 1.;
  					_e[0][0] = pos_;
  					if(_e[0][0] > _e[0][1] - 1) {
  						_e[0][1] = _e[0][0];
  					}
  					return _e[0][0];
  				};
  			})([tri]);
  			var pos_ = this1[0] + 1.;
  			this1[0] = pos_;
  			if(this1[0] > this1[1] - 1) {
  				this1[1] = this1[0];
  			}
  		}
  		this.transformTexturePos();
  		this.uploadVectors();
  		if(htmlHelper_tools_AnimateTimer.s == null) {
  			htmlHelper_tools_AnimateTimer.s = window.document.createElement("style");
  			htmlHelper_tools_AnimateTimer.s.innerHTML = "@keyframes spin { from { transform:rotate( 0deg ); } to { transform:rotate( 360deg ); } }";
  			window.document.getElementsByTagName("head")[0].appendChild(htmlHelper_tools_AnimateTimer.s);
  			htmlHelper_tools_AnimateTimer.s.animation = "spin 1s linear infinite";
  			htmlHelper_tools_AnimateTimer.loop(60.0);
  		}
  		htmlHelper_tools_AnimateTimer.onFrame = $bind(this,this.render_);
  	}
  	,scaleToGL: function() {
  		this.scale = 0.00166666666666666677;
  		var this1 = new geom_structure_Mat1x4(this.scale,-this.scale,this.scale,1.);
  		var v = this1;
  		var this1 = new geom_structure_Mat4x3(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,1.,0.);
  		var this2 = this1;
  		var this1 = new geom_structure_Mat4x3(1.,0.,0.,-1.,0.,1.,0.,1.,0.,0.,1.,0.);
  		var s = this1;
  		var this1 = new geom_structure_Mat4x3(this2.a * s.a + this2.b * s.e + this2.c * s.i,this2.a * s.b + this2.b * s.f + this2.c * s.j,this2.a * s.c + this2.b * s.g + this2.c * s.k,this2.a * s.d + this2.b * s.h + this2.c * s.l + this2.d,this2.e * s.a + this2.f * s.e + this2.g * s.i,this2.e * s.b + this2.f * s.f + this2.g * s.j,this2.e * s.c + this2.f * s.g + this2.g * s.k,this2.e * s.d + this2.f * s.h + this2.g * s.l + this2.h,this2.i * s.a + this2.j * s.e + this2.k * s.i,this2.i * s.b + this2.j * s.f + this2.k * s.j,this2.i * s.c + this2.j * s.g + this2.k * s.k,this2.i * s.d + this2.j * s.h + this2.k * s.l + this2.l);
  		var this2 = this1;
  		var this1 = new geom_structure_Mat4x3(this2.a * v.x,this2.b,this2.c,this2.d,this2.e,this2.f * v.y,this2.g,this2.h,this2.i,this2.j,this2.k * v.z,this2.l);
  		return this1;
  	}
  	,transformTexturePos: function() {
  		geom_flat_f32_Float32FlatTriangleXY.transformAll(this.textPos,this.scaleTexture());
  	}
  	,scaleTexture: function() {
  		this.scale = 0.00166666666666666677;
  		var this1 = new geom_structure_Mat1x4(this.scale * 2,this.scale * 2,1.,1.);
  		var v = this1;
  		var this1 = new geom_structure_Mat4x3(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,1.,0.);
  		var this2 = this1;
  		var this1 = new geom_structure_Mat4x3(1.,0.,0.,.5,0.,1.,0.,.5,0.,0.,1.,0.);
  		var s = this1;
  		var this1 = new geom_structure_Mat4x3(this2.a * s.a + this2.b * s.e + this2.c * s.i,this2.a * s.b + this2.b * s.f + this2.c * s.j,this2.a * s.c + this2.b * s.g + this2.c * s.k,this2.a * s.d + this2.b * s.h + this2.c * s.l + this2.d,this2.e * s.a + this2.f * s.e + this2.g * s.i,this2.e * s.b + this2.f * s.f + this2.g * s.j,this2.e * s.c + this2.f * s.g + this2.g * s.k,this2.e * s.d + this2.f * s.h + this2.g * s.l + this2.h,this2.i * s.a + this2.j * s.e + this2.k * s.i,this2.i * s.b + this2.j * s.f + this2.k * s.j,this2.i * s.c + this2.j * s.g + this2.k * s.k,this2.i * s.d + this2.j * s.h + this2.k * s.l + this2.l);
  		var this2 = this1;
  		var this1 = new geom_structure_Mat4x3(this2.a * v.x,this2.b,this2.c,this2.d,this2.e,this2.f * v.y,this2.g,this2.h,this2.i,this2.j,this2.k * v.z,this2.l);
  		return this1;
  	}
  	,uploadVectors: function() {
  		var this1 = this.verts;
  		this.vertices = this1.subarray(2,geom_flat_f32_Float32Flat.get_size(this1) * 9 + 2);
  		var this1 = this.cols;
  		this.colors = this1.subarray(2,geom_flat_f32_Float32Flat.get_size(this1) * 4 + 2);
  		var this1 = this.textPos;
  		var texs = this1.subarray(2,geom_flat_f32_Float32Flat.get_size(this1) * 6 + 2);
  		this.indices = this.createIndices();
  		var this1 = new Float32Array(1000002);
  		var this2 = this1;
  		this2[0] = 0.;
  		this2[1] = 0.;
  		var this1 = this2;
  		var this2 = this1;
  		this.verts = this2;
  		var this1 = new Float32Array(1000002);
  		var this2 = this1;
  		this2[0] = 0.;
  		this2[1] = 0.;
  		var this1 = this2;
  		var this2 = this1;
  		this.cols = this2;
  		var gl = this.gl;
  		var indices = this.indices;
  		var indexBuffer = gl.createBuffer();
  		gl.bindBuffer(34963,indexBuffer);
  		gl.bufferData(34963,indices,35044);
  		gl.bindBuffer(34963,null);
  		switch(this.shaderTest._hx_index) {
  		case 0:
  			var gl = this.gl;
  			var program = this.program;
  			var vertices = this.vertices;
  			var colors = this.colors;
  			var texture = null;
  			var name = htmlHelper_webgl_WebGLSetup.posName;
  			var buffer = gl.createBuffer();
  			var arrBuffer = 34962;
  			gl.bindBuffer(arrBuffer,buffer);
  			gl.bufferData(arrBuffer,vertices,35044);
  			var flo = gl.getAttribLocation(program,name);
  			gl.vertexAttribPointer(flo,3,5126,false,0,0);
  			gl.enableVertexAttribArray(flo);
  			gl.bindBuffer(arrBuffer,null);
  			var name = htmlHelper_webgl_WebGLSetup.colorName;
  			var buffer = gl.createBuffer();
  			var arrBuffer = 34962;
  			gl.bindBuffer(arrBuffer,buffer);
  			gl.bufferData(arrBuffer,colors,35044);
  			var flo = gl.getAttribLocation(program,name);
  			gl.vertexAttribPointer(flo,4,5126,false,0,0);
  			gl.enableVertexAttribArray(flo);
  			gl.bindBuffer(arrBuffer,null);
  			if(texture != null) {
  				var name = htmlHelper_webgl_WebGLSetup.textureName;
  				var buffer = gl.createBuffer();
  				var arrBuffer = 34962;
  				gl.bindBuffer(arrBuffer,buffer);
  				gl.bufferData(arrBuffer,texture,35044);
  				var flo = gl.getAttribLocation(program,name);
  				gl.vertexAttribPointer(flo,2,5126,false,0,0);
  				gl.enableVertexAttribArray(flo);
  				gl.bindBuffer(arrBuffer,null);
  			}
  			break;
  		case 1:
  			var gl = this.gl;
  			var program = this.program;
  			var vertices = this.vertices;
  			var colors = this.colors;
  			var name = htmlHelper_webgl_WebGLSetup.posName;
  			var buffer = gl.createBuffer();
  			var arrBuffer = 34962;
  			gl.bindBuffer(arrBuffer,buffer);
  			gl.bufferData(arrBuffer,vertices,35044);
  			var flo = gl.getAttribLocation(program,name);
  			gl.vertexAttribPointer(flo,3,5126,false,0,0);
  			gl.enableVertexAttribArray(flo);
  			gl.bindBuffer(arrBuffer,null);
  			var name = htmlHelper_webgl_WebGLSetup.colorName;
  			var buffer = gl.createBuffer();
  			var arrBuffer = 34962;
  			gl.bindBuffer(arrBuffer,buffer);
  			gl.bufferData(arrBuffer,colors,35044);
  			var flo = gl.getAttribLocation(program,name);
  			gl.vertexAttribPointer(flo,4,5126,false,0,0);
  			gl.enableVertexAttribArray(flo);
  			gl.bindBuffer(arrBuffer,null);
  			if(texs != null) {
  				var name = htmlHelper_webgl_WebGLSetup.textureName;
  				var buffer = gl.createBuffer();
  				var arrBuffer = 34962;
  				gl.bindBuffer(arrBuffer,buffer);
  				gl.bufferData(arrBuffer,texs,35044);
  				var flo = gl.getAttribLocation(program,name);
  				gl.vertexAttribPointer(flo,2,5126,false,0,0);
  				gl.enableVertexAttribArray(flo);
  				gl.bindBuffer(arrBuffer,null);
  			}
  			break;
  		}
  	}
  	,createIndices: function() {
  		var this1 = this.ind;
  		this1[0] = 0;
  		if(this1[0] > this1[1] - 1) {
  			this1[1] = this1[0];
  		}
  		var _g = 0;
  		var _g1 = geom_flat_f32_Float32Flat.get_size(this.verts);
  		while(_g < _g1) {
  			var i = _g++;
  			var this1 = this.ind;
  			var v = i * 3;
  			this1[this1[0] * 3 + 2] = v;
  			var this2 = this.ind;
  			var v1 = i * 3 + 1;
  			this2[this2[0] * 3 + 1 + 2] = v1;
  			var this3 = this.ind;
  			var v2 = i * 3 + 2;
  			this3[this3[0] * 3 + 2 + 2] = v2;
  			var this4 = this.ind;
  			var pos_ = this4[0] + 1;
  			this4[0] = pos_;
  			if(this4[0] > this4[1] - 1) {
  				this4[1] = this4[0];
  			}
  		}
  		var this1 = this.ind;
  		var arr = this1.subarray(2,this1[1] * 3 + 2);
  		return arr;
  	}
  	,darkBackground: function() {
  		var dark = 0.09375;
  		this.bgRed = dark;
  		this.bgGreen = dark;
  		this.bgBlue = dark;
  	}
  	,drawShapes: function() {
  		var layoutPos = new trilateral3Setup_helpers_LayoutPos(600);
  		this.pen.currentColor = -10079488;
  		this.uvQuad(50.,50.,600,600);
  		if(this.backgroundSquare) {
  			new trilateral3Setup_drawings_BorderRed(this.pen,layoutPos);
  		}
  		var gridLines = new trilateral3Setup_drawings_GridLines(this.pen,600);
  		gridLines.draw(10,60226304,-258540557);
  		new trilateral3Setup_drawings_GreenSquare(this.pen,layoutPos);
  		new trilateral3Setup_drawings_OrangeDavidStar(this.pen,layoutPos);
  		new trilateral3Setup_drawings_IndigoCircle(this.pen,layoutPos);
  		new trilateral3Setup_drawings_VioletRoundedRectangle(this.pen,layoutPos);
  		new trilateral3Setup_drawings_YellowDiamond(this.pen,layoutPos);
  		new trilateral3Setup_drawings_MidGreySquareOutline(this.pen,layoutPos);
  		new trilateral3Setup_drawings_BlueRectangle(this.pen,layoutPos);
  		new trilateral3Setup_drawings_RedRoundedRectangleOutline(this.pen,layoutPos);
  		new trilateral3Setup_drawings_QuadCurveTest(this.pen,layoutPos);
  		new trilateral3Setup_drawings_CubicCurveTest(this.pen,layoutPos);
  	}
  	,uvQuad: function(x,y,wid,hi) {
  		var bx = x;
  		var by = y;
  		var ex = x + wid;
  		var ey = y + hi;
  		var a_x = bx;
  		var a_y = by;
  		var b_x = ex;
  		var b_y = by;
  		var c_x = ex;
  		var c_y = ey;
  		var d_x = bx;
  		var d_y = ey;
  		var _this = this.pen;
  		var color = -1;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.drawType.triangle(a_x,a_y,0,b_x,b_y,0,d_x,d_y,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this.drawType.next();
  		_this.colorType.cornerColors(color,color,color);
  		var _this = this.pen;
  		var color = -1;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.drawType.triangle(b_x,b_y,0,d_x,d_y,0,c_x,c_y,0);
  		if(trilateral3_Trilateral.transformMatrix != null) {
  			_this.drawType.transform(trilateral3_Trilateral.transformMatrix);
  		}
  		_this.drawType.next();
  		_this.colorType.cornerColors(color,color,color);
  	}
  	,render_: function(i) {
  		this.model = this.axisModel.updateCalculate(this.model);
  		var q1 = this.offset;
  		var q2 = this.model;
  		var q11 = q2.real;
  		var q21 = q1.real;
  		var this1 = new geom_structure_Mat1x4(q11.x * q21.w + q11.y * q21.z - q11.z * q21.y + q11.w * q21.x,-q11.x * q21.z + q11.y * q21.w + q11.z * q21.x + q11.w * q21.y,q11.x * q21.y - q11.y * q21.x + q11.z * q21.w + q11.w * q21.z,-q11.x * q21.x - q11.y * q21.y - q11.z * q21.z + q11.w * q21.w);
  		var q11 = q2.dual;
  		var q21 = q1.real;
  		var this2 = new geom_structure_Mat1x4(q11.x * q21.w + q11.y * q21.z - q11.z * q21.y + q11.w * q21.x,-q11.x * q21.z + q11.y * q21.w + q11.z * q21.x + q11.w * q21.y,q11.x * q21.y - q11.y * q21.x + q11.z * q21.w + q11.w * q21.z,-q11.x * q21.x - q11.y * q21.y - q11.z * q21.z + q11.w * q21.w);
  		var a = this2;
  		var q11 = q2.real;
  		var q2 = q1.dual;
  		var this2 = new geom_structure_Mat1x4(q11.x * q2.w + q11.y * q2.z - q11.z * q2.y + q11.w * q2.x,-q11.x * q2.z + q11.y * q2.w + q11.z * q2.x + q11.w * q2.y,q11.x * q2.y - q11.y * q2.x + q11.z * q2.w + q11.w * q2.z,-q11.x * q2.x - q11.y * q2.y - q11.z * q2.z + q11.w * q2.w);
  		var b = this2;
  		var this2 = new geom_structure_Mat1x4(a.x + b.x,a.y + b.y,a.z + b.z,a.w + b.w);
  		var this3 = new geom_structure_DualQ(this1,this2);
  		var this1 = this3;
  		var a = this1.real;
  		var b = this1.real;
  		var mag = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
  		var this2;
  		if(mag < 0) {
  			this2 = null;
  		} else {
  			var oneOver = 1 / mag;
  			var a = this1.real;
  			var this3 = new geom_structure_Mat1x4(a.x * oneOver,a.y * oneOver,a.z * oneOver,a.w * oneOver);
  			var a = this1.dual;
  			var this1 = new geom_structure_Mat1x4(a.x * oneOver,a.y * oneOver,a.z * oneOver,a.w * oneOver);
  			var this4 = new geom_structure_DualQ(this3,this1);
  			this2 = this4;
  		}
  		var a = this2.real;
  		var b = this2.real;
  		var mag = a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
  		var q;
  		if(mag < 0) {
  			q = null;
  		} else {
  			var oneOver = 1 / mag;
  			var a = this2.real;
  			var this1 = new geom_structure_Mat1x4(a.x * oneOver,a.y * oneOver,a.z * oneOver,a.w * oneOver);
  			var a = this2.dual;
  			var this2 = new geom_structure_Mat1x4(a.x * oneOver,a.y * oneOver,a.z * oneOver,a.w * oneOver);
  			var this3 = new geom_structure_DualQ(this1,this2);
  			q = this3;
  		}
  		var this1 = new geom_structure_Mat4x3(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,1.,0.);
  		var m = this1;
  		var w = q.real.w;
  		var x = q.real.x;
  		var y = q.real.y;
  		var z = q.real.z;
  		m.a = w * w + x * x - y * y - z * z;
  		m.e = 2 * x * y + 2 * w * z;
  		m.i = 2 * x * z - 2 * w * y;
  		m.b = 2 * x * y - 2 * w * z;
  		m.f = w * w + y * y - x * x - z * z;
  		m.j = 2 * y * z + 2 * w * x;
  		m.c = 2 * x * z + 2 * w * y;
  		m.g = 2 * y * z - 2 * w * x;
  		m.k = w * w + z * z - x * x - y * y;
  		var a = q.dual;
  		var this1 = new geom_structure_Mat1x4(a.x * 2.,a.y * 2.,a.z * 2.,a.w * 2.);
  		var q1 = this1;
  		var a = q.real;
  		var this1 = new geom_structure_Mat1x4(-a.x,-a.y,-a.z,a.w);
  		var q2 = this1;
  		var this1 = new geom_structure_Mat1x4(q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,-q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,-q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w);
  		q1 = this1;
  		var this1 = new geom_structure_Mat1x4(q1.x,q1.y,q1.z,1.);
  		var t = this1;
  		m.d = t.x;
  		m.h = t.y;
  		m.l = t.z;
  		var trans = m;
  		var scale = 1 / Math.tan(0.785398163395);
  		var dif = 99.9;
  		var this1 = new geom_structure_Mat4x4(scale,0.,0.,0.,0.,scale,0.,0.,0.,0.,-100. / dif,-10. / dif,0.,0.,-1.,0.);
  		var r = this1;
  		var this1 = new geom_structure_Mat4x4(trans.a,trans.b,trans.c,trans.d,trans.e,trans.f,trans.g,trans.h,trans.i,trans.j,trans.k,trans.l,0.,0.,0.,1.);
  		var s = this1;
  		var this1 = new geom_structure_Mat4x4(r.a * s.a + r.b * s.e + r.c * s.i + r.d * s.m,r.a * s.b + r.b * s.f + r.c * s.j + r.d * s.n,r.a * s.c + r.b * s.g + r.c * s.k + r.d * s.o,r.a * s.d + r.b * s.h + r.c * s.l + r.d * s.p,r.e * s.a + r.f * s.e + r.g * s.i + r.h * s.m,r.e * s.b + r.f * s.f + r.g * s.j + r.h * s.n,r.e * s.c + r.f * s.g + r.g * s.k + r.h * s.o,r.e * s.d + r.f * s.h + r.g * s.l + r.h * s.p,r.i * s.a + r.j * s.e + r.k * s.i + r.l * s.m,r.i * s.b + r.j * s.f + r.k * s.j + r.l * s.n,r.i * s.c + r.j * s.g + r.k * s.k + r.l * s.o,r.i * s.d + r.j * s.h + r.k * s.l + r.l * s.p,r.m * s.a + r.n * s.e + r.o * s.i + r.p * s.m,r.m * s.b + r.n * s.f + r.o * s.j + r.p * s.n,r.m + s.c + r.n * s.g + r.o * s.k + r.p * s.o,r.m * s.d + r.n * s.h + r.o * s.l + r.p * s.p);
  		var arr = this.matrix32Array;
  		var here = this1;
  		arr[0] = here.a;
  		arr[1] = here.e;
  		arr[2] = here.i;
  		arr[3] = here.m;
  		arr[4] = here.b;
  		arr[5] = here.f;
  		arr[6] = here.j;
  		arr[7] = here.n;
  		arr[8] = here.c;
  		arr[9] = here.g;
  		arr[10] = here.k;
  		arr[11] = here.o;
  		arr[12] = here.d;
  		arr[13] = here.h;
  		arr[14] = here.l;
  		arr[15] = here.p;
  		this.render();
  	}
  	,__class__: trilateral3Setup_Main
  });
  var trilateral3Setup_drawings_DrawingLayout = function(pen,layoutPos) {
  	this.size = 80;
  	this.pen = pen;
  	this.centre = layoutPos.centre;
  	this.quarter = layoutPos.quarter;
  	this.bottomLeft = layoutPos.bottomLeft;
  	this.bottomRight = layoutPos.bottomRight;
  	this.topLeft = layoutPos.topLeft;
  	this.topRight = layoutPos.topRight;
  	this.draw();
  };
  trilateral3Setup_drawings_DrawingLayout.__name__ = true;
  trilateral3Setup_drawings_DrawingLayout.prototype = {
  	draw: function() {
  	}
  	,__class__: trilateral3Setup_drawings_DrawingLayout
  };
  var trilateral3Setup_drawings_BlueRectangle = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_BlueRectangle.__name__ = true;
  trilateral3Setup_drawings_BlueRectangle.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_BlueRectangle.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var x = this.centre.x - 100;
  		var ax = x;
  		var ay = this.centre.y - 50;
  		var bx = x + this.size * 2;
  		var by = ay;
  		var cx = bx;
  		var cy = ay + this.size;
  		var dx = x;
  		var dy = cy;
  		drawType.triangle(ax,ay,0,bx,by,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,cx,cy,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		var len = 2;
  		var _this = this.pen;
  		var color = -16776961;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_BlueRectangle
  });
  var trilateral3Setup_drawings_BorderRed = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_BorderRed.__name__ = true;
  trilateral3Setup_drawings_BorderRed.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_BorderRed.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var px = this.centre.x;
  		var py = this.centre.y;
  		var ax = 0.;
  		var ay = 0.;
  		var bx = 0.;
  		var by = 0.;
  		var cx = 0.;
  		var cy = 0.;
  		var dx = 0.;
  		var dy = 0.;
  		var a0x = 0.;
  		var a0y = 0.;
  		var b0x = 0.;
  		var b0y = 0.;
  		var c0x = 0.;
  		var c0y = 0.;
  		var d0x = 0.;
  		var d0y = 0.;
  		ax = px - 600;
  		ay = py - 600;
  		var lx = 1200;
  		var ly = lx;
  		bx = ax + lx;
  		by = ay;
  		cx = bx;
  		cy = ay + ly;
  		dx = ax;
  		dy = cy;
  		var radius0 = 580;
  		a0x = px - radius0;
  		a0y = py - radius0;
  		var l0x = radius0 * 2;
  		var l0y = l0x;
  		b0x = a0x + l0x;
  		b0y = a0y;
  		c0x = b0x;
  		c0y = a0y + l0y;
  		d0x = a0x;
  		d0y = c0y;
  		drawType.triangle(ax,ay,0,bx,by,0,a0x,a0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,b0x,b0y,0,a0x,a0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(d0x,d0y,0,c0x,c0y,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(c0x,c0y,0,cx,cy,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(ax,ay,0,a0x,a0y,0,d0x,d0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(ax,ay,0,d0x,d0y,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(b0x,b0y,0,bx,by,0,c0x,c0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,cx,cy,0,c0x,c0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		var len = 8;
  		var _this = this.pen;
  		var color = -65536;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_BorderRed
  });
  var trilateral3Setup_drawings_CubicCurveTest = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_CubicCurveTest.__name__ = true;
  trilateral3Setup_drawings_CubicCurveTest.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_CubicCurveTest.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		this.pen.currentColor = -16776961;
  		var sketch = new trilateral3_drawing_Sketch(this.pen,4,3);
  		sketch.width = 20;
  		sketch.colourFunction = function(colour,x,y,x_,y_) {
  			return Math.round(colour - x * y);
  		};
  		var translateContext = new justPath_transform_TranslationContext(sketch,50,200);
  		var p = new justPath_SvgPath(translateContext);
  		p.parse("M100,200 C100,100 250,100 250,200S400,300 400,200");
  	}
  	,__class__: trilateral3Setup_drawings_CubicCurveTest
  });
  var trilateral3Setup_drawings_GreenSquare = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_GreenSquare.__name__ = true;
  trilateral3Setup_drawings_GreenSquare.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_GreenSquare.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var px = (this.bottomRight.x + this.centre.x) / 2;
  		var py = (this.bottomRight.y + this.centre.y) / 2;
  		var radius = 0.7 * this.size;
  		var ax = 0.;
  		var ay = 0.;
  		var bx = 0.;
  		var by = 0.;
  		var cx = 0.;
  		var cy = 0.;
  		var dx = 0.;
  		var dy = 0.;
  		ax = px - radius;
  		ay = py - radius;
  		var lx = radius * 2;
  		var ly = lx;
  		bx = ax + lx;
  		by = ay;
  		cx = bx;
  		cy = ay + ly;
  		dx = ax;
  		dy = cy;
  		drawType.triangle(ax,ay,0,bx,by,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,cx,cy,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		var len = 2;
  		var _this = this.pen;
  		var color = -16711936;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_GreenSquare
  });
  var trilateral3Setup_drawings_GridLines = function(pen,stageRadius) {
  	this.pen = pen;
  	this.stageRadius = stageRadius;
  };
  trilateral3Setup_drawings_GridLines.__name__ = true;
  trilateral3Setup_drawings_GridLines.prototype = {
  	draw: function(spacing,colorA,colorB) {
  		var gap = 15;
  		var len = Math.ceil((this.stageRadius * 2 - 2 * gap) / spacing);
  		this.pen.currentColor = colorB;
  		var sketch = new trilateral3_drawing_Sketch(this.pen,2,3);
  		sketch.width = spacing / 4;
  		var delta = 0.;
  		sketch.moveTo(0,0);
  		var _g = 1;
  		var _g1 = len;
  		while(_g < _g1) {
  			var i = _g++;
  			var delta = i * spacing;
  			if(i % 10 == 0) {
  				this.pen.currentColor = colorA;
  			} else {
  				this.pen.currentColor = colorB;
  			}
  			sketch.moveTo(gap,delta + gap);
  			var x_ = this.stageRadius * 2 - gap;
  			var y_ = delta + gap;
  			var repeat = sketch.x == x_ && sketch.y == y_;
  			if(!repeat) {
  				if(sketch.widthFunction != null) {
  					sketch.width = sketch.widthFunction(sketch.width,sketch.x,sketch.y,x_,y_);
  				}
  				if(sketch.colourFunction != null) {
  					sketch.pen.currentColor = sketch.colourFunction(sketch.pen.currentColor,sketch.x,sketch.y,x_,y_);
  				}
  				sketch.line(x_,y_);
  				var l = sketch.points.length;
  				var p = sketch.points[l - 1];
  				var l2 = p.length;
  				p[l2] = x_;
  				p[l2 + 1] = y_;
  				var d = sketch.dim[sketch.dim.length - 1];
  				if(x_ < d.minX) {
  					d.minX = x_;
  				}
  				if(x_ > d.maxX) {
  					d.maxX = x_;
  				}
  				if(y_ < d.minY) {
  					d.minY = y_;
  				}
  				if(y_ > d.maxY) {
  					d.maxY = y_;
  				}
  				sketch.x = x_;
  				sketch.y = y_;
  			}
  			sketch.moveTo(delta + gap,gap);
  			var x_1 = delta + gap;
  			var y_1 = this.stageRadius * 2 - gap;
  			var repeat1 = sketch.x == x_1 && sketch.y == y_1;
  			if(!repeat1) {
  				if(sketch.widthFunction != null) {
  					sketch.width = sketch.widthFunction(sketch.width,sketch.x,sketch.y,x_1,y_1);
  				}
  				if(sketch.colourFunction != null) {
  					sketch.pen.currentColor = sketch.colourFunction(sketch.pen.currentColor,sketch.x,sketch.y,x_1,y_1);
  				}
  				sketch.line(x_1,y_1);
  				var l1 = sketch.points.length;
  				var p1 = sketch.points[l1 - 1];
  				var l21 = p1.length;
  				p1[l21] = x_1;
  				p1[l21 + 1] = y_1;
  				var d1 = sketch.dim[sketch.dim.length - 1];
  				if(x_1 < d1.minX) {
  					d1.minX = x_1;
  				}
  				if(x_1 > d1.maxX) {
  					d1.maxX = x_1;
  				}
  				if(y_1 < d1.minY) {
  					d1.minY = y_1;
  				}
  				if(y_1 > d1.maxY) {
  					d1.maxY = y_1;
  				}
  				sketch.x = x_1;
  				sketch.y = y_1;
  			}
  		}
  	}
  	,__class__: trilateral3Setup_drawings_GridLines
  };
  var trilateral3Setup_drawings_IndigoCircle = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_IndigoCircle.__name__ = true;
  trilateral3Setup_drawings_IndigoCircle.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_IndigoCircle.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var ax = (this.topRight.x + this.centre.x) / 2;
  		var ay = (this.topRight.y + this.centre.y) / 2;
  		var radius = this.size;
  		var pi = Math.PI;
  		var theta = pi / 2;
  		var step = pi * 2 / 36;
  		var bx;
  		var by;
  		var cx;
  		var cy;
  		var _g = 0;
  		var _g1 = 36;
  		while(_g < _g1) {
  			var i = _g++;
  			bx = ax + radius * Math.sin(theta);
  			by = ay + radius * Math.cos(theta);
  			theta += step;
  			cx = ax + radius * Math.sin(theta);
  			cy = ay + radius * Math.cos(theta);
  			drawType.triangle(ax,ay,0,bx,by,0,cx,cy,0);
  			var m = trilateral3_Trilateral.transformMatrix;
  			if(m != null) {
  				drawType.transform(m);
  			}
  			drawType.next();
  		}
  		var len = 36;
  		var _this = this.pen;
  		var color = -11861886;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_IndigoCircle
  });
  var trilateral3Setup_drawings_MidGreySquareOutline = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_MidGreySquareOutline.__name__ = true;
  trilateral3Setup_drawings_MidGreySquareOutline.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_MidGreySquareOutline.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var px = (this.bottomRight.x + this.centre.x) / 2;
  		var py = (this.bottomRight.y + this.centre.y) / 2;
  		var radius = 0.7 * this.size;
  		var ax = 0.;
  		var ay = 0.;
  		var bx = 0.;
  		var by = 0.;
  		var cx = 0.;
  		var cy = 0.;
  		var dx = 0.;
  		var dy = 0.;
  		var a0x = 0.;
  		var a0y = 0.;
  		var b0x = 0.;
  		var b0y = 0.;
  		var c0x = 0.;
  		var c0y = 0.;
  		var d0x = 0.;
  		var d0y = 0.;
  		ax = px - radius;
  		ay = py - radius;
  		var lx = radius * 2;
  		var ly = lx;
  		bx = ax + lx;
  		by = ay;
  		cx = bx;
  		cy = ay + ly;
  		dx = ax;
  		dy = cy;
  		var radius0 = radius - 6;
  		a0x = px - radius0;
  		a0y = py - radius0;
  		var l0x = radius0 * 2;
  		var l0y = l0x;
  		b0x = a0x + l0x;
  		b0y = a0y;
  		c0x = b0x;
  		c0y = a0y + l0y;
  		d0x = a0x;
  		d0y = c0y;
  		drawType.triangle(ax,ay,0,bx,by,0,a0x,a0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,b0x,b0y,0,a0x,a0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(d0x,d0y,0,c0x,c0y,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(c0x,c0y,0,cx,cy,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(ax,ay,0,a0x,a0y,0,d0x,d0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(ax,ay,0,d0x,d0y,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(b0x,b0y,0,bx,by,0,c0x,c0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,cx,cy,0,c0x,c0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		var len = 8;
  		var _this = this.pen;
  		var color = -65536;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_MidGreySquareOutline
  });
  var trilateral3Setup_drawings_OrangeDavidStar = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_OrangeDavidStar.__name__ = true;
  trilateral3Setup_drawings_OrangeDavidStar.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_OrangeDavidStar.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var px = (this.bottomLeft.x + this.centre.x) / 2;
  		var py = (this.bottomLeft.y + this.centre.y) / 2;
  		var radius = this.size;
  		var pi = Math.PI;
  		var omega = -pi;
  		var a0x = px + radius * Math.sin(omega);
  		var a0y = py + radius * Math.cos(omega);
  		omega += pi / 3;
  		var a1x = px + radius * Math.sin(omega);
  		var a1y = py + radius * Math.cos(omega);
  		omega += pi / 3;
  		var b0x = px + radius * Math.sin(omega);
  		var b0y = py + radius * Math.cos(omega);
  		omega += pi / 3;
  		var b1x = px + radius * Math.sin(omega);
  		var b1y = py + radius * Math.cos(omega);
  		omega += pi / 3;
  		var c0x = px + radius * Math.sin(omega);
  		var c0y = py + radius * Math.cos(omega);
  		omega += pi / 3;
  		var c1x = px + radius * Math.sin(omega);
  		var c1y = py + radius * Math.cos(omega);
  		drawType.triangle(a0x,a0y,0,b0x,b0y,0,c0x,c0y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(a1x,a1y,0,b1x,b1y,0,c1x,c1y,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		var len = 2;
  		var _this = this.pen;
  		var color = -33024;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_OrangeDavidStar
  });
  var trilateral3Setup_drawings_QuadCurveTest = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_QuadCurveTest.__name__ = true;
  trilateral3Setup_drawings_QuadCurveTest.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_QuadCurveTest.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		this.pen.currentColor = -16776961;
  		var sketch = new trilateral3_drawing_Sketch(this.pen,4,3);
  		sketch.width = 2;
  		sketch.widthFunction = function(width,x,y,x_,y_) {
  			return width + 0.016;
  		};
  		var translateContext = new justPath_transform_TranslationContext(sketch,-100,300);
  		var p = new justPath_SvgPath(translateContext);
  		p.parse("M200,300 Q400,50 600,300 T1000,300");
  	}
  	,__class__: trilateral3Setup_drawings_QuadCurveTest
  });
  var trilateral3Setup_drawings_RedRoundedRectangleOutline = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_RedRoundedRectangleOutline.__name__ = true;
  trilateral3Setup_drawings_RedRoundedRectangleOutline.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_RedRoundedRectangleOutline.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var x = this.topLeft.x - this.size;
  		var y = (this.topLeft.y + this.bottomLeft.y) / 2 - this.size / 2;
  		var width = this.size * 2;
  		var height = this.size;
  		var pi = Math.PI;
  		var pi_2 = Math.PI / 2;
  		var ax = x + 30;
  		var ay = y + 30;
  		var bx = x + width - 30;
  		var by = y + 30;
  		var cx = bx;
  		var cy = y + height - 30;
  		var dx = ax;
  		var dy = cy;
  		var count = 0;
  		var ax1 = ax;
  		var ay1 = y;
  		var bx1 = ax + (width - 60);
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + 6;
  		var dx1 = ax;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var ax1 = ax;
  		var ay1 = y + height - 6;
  		var bx1 = ax + (width - 60);
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + 6;
  		var dx1 = ax;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var dimY = height - 60;
  		var ax1 = x;
  		var ay1 = ay;
  		var bx1 = x + 6;
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + dimY;
  		var dx1 = x;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var x1 = x + width - 6;
  		var ax1 = x1;
  		var ay1 = by;
  		var bx1 = x1 + 6;
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + dimY;
  		var dx1 = x1;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var beta = -pi;
  		var gamma = -pi_2;
  		var pi1 = Math.PI;
  		var step = pi1 * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.CLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = beta;
  		var cx1;
  		var cy1;
  		var bx1 = 0;
  		var by1 = 0;
  		var dx1 = 0;
  		var dy1 = 0;
  		var ex = 0;
  		var ey = 0;
  		var r2 = 24;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx1 = ax + 30 * Math.sin(angle);
  			cy1 = ay + 30 * Math.cos(angle);
  			ex = ax + r2 * Math.sin(angle);
  			ey = ay + r2 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(dx1,dy1,0,bx1,by1,0,cx1,cy1,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  				drawType.triangle(dx1,dy1,0,cx1,cy1,0,ex,ey,0);
  				var m1 = trilateral3_Trilateral.transformMatrix;
  				if(m1 != null) {
  					drawType.transform(m1);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx1 = cx1;
  			by1 = cy1;
  			dx1 = ex;
  			dy1 = ey;
  		}
  		count += totalSteps * 2;
  		var pi1 = Math.PI;
  		var step = pi1 * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.CLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = pi_2;
  		var cx1;
  		var cy1;
  		var bx1 = 0;
  		var by1 = 0;
  		var dx1 = 0;
  		var dy1 = 0;
  		var ex = 0;
  		var ey = 0;
  		var r2 = 24;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx1 = bx + 30 * Math.sin(angle);
  			cy1 = by + 30 * Math.cos(angle);
  			ex = bx + r2 * Math.sin(angle);
  			ey = by + r2 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(dx1,dy1,0,bx1,by1,0,cx1,cy1,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  				drawType.triangle(dx1,dy1,0,cx1,cy1,0,ex,ey,0);
  				var m1 = trilateral3_Trilateral.transformMatrix;
  				if(m1 != null) {
  					drawType.transform(m1);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx1 = cx1;
  			by1 = cy1;
  			dx1 = ex;
  			dy1 = ey;
  		}
  		count += totalSteps * 2;
  		var pi = Math.PI;
  		var step = pi * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.ANTICLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = pi_2;
  		var cx1;
  		var cy1;
  		var bx = 0;
  		var by = 0;
  		var dx1 = 0;
  		var dy1 = 0;
  		var ex = 0;
  		var ey = 0;
  		var r2 = 24;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx1 = cx + 30 * Math.sin(angle);
  			cy1 = cy + 30 * Math.cos(angle);
  			ex = cx + r2 * Math.sin(angle);
  			ey = cy + r2 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(dx1,dy1,0,bx,by,0,cx1,cy1,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  				drawType.triangle(dx1,dy1,0,cx1,cy1,0,ex,ey,0);
  				var m1 = trilateral3_Trilateral.transformMatrix;
  				if(m1 != null) {
  					drawType.transform(m1);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx = cx1;
  			by = cy1;
  			dx1 = ex;
  			dy1 = ey;
  		}
  		count += totalSteps * 2;
  		var gamma = -pi_2;
  		var pi = Math.PI;
  		var step = pi * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.ANTICLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = 0;
  		var cx;
  		var cy;
  		var bx = 0;
  		var by = 0;
  		var dx1 = 0;
  		var dy1 = 0;
  		var ex = 0;
  		var ey = 0;
  		var r2 = 24;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx = dx + 30 * Math.sin(angle);
  			cy = dy + 30 * Math.cos(angle);
  			ex = dx + r2 * Math.sin(angle);
  			ey = dy + r2 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(dx1,dy1,0,bx,by,0,cx,cy,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  				drawType.triangle(dx1,dy1,0,cx,cy,0,ex,ey,0);
  				var m1 = trilateral3_Trilateral.transformMatrix;
  				if(m1 != null) {
  					drawType.transform(m1);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx = cx;
  			by = cy;
  			dx1 = ex;
  			dy1 = ey;
  		}
  		var len = count += totalSteps * 2;
  		var _this = this.pen;
  		var color = -65536;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_RedRoundedRectangleOutline
  });
  var trilateral3Setup_drawings_VioletRoundedRectangle = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_VioletRoundedRectangle.__name__ = true;
  trilateral3Setup_drawings_VioletRoundedRectangle.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_VioletRoundedRectangle.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var x = this.topLeft.x - this.size;
  		var y = (this.topLeft.y + this.bottomLeft.y) / 2 - this.size / 2;
  		var width = this.size * 2;
  		var height = this.size;
  		var pi = Math.PI;
  		var pi_2 = Math.PI / 2;
  		var ax = x + 30;
  		var ay = y + 30;
  		var bx = x + width - 30;
  		var by = y + 30;
  		var cx = bx;
  		var cy = y + height - 30;
  		var dx = ax;
  		var dy = cy;
  		var count = 0;
  		var ax1 = ax;
  		var ay1 = y;
  		var bx1 = ax + (width - 60);
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + height;
  		var dx1 = ax;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var dimY = height - 60;
  		var ax1 = x;
  		var ay1 = ay;
  		var bx1 = x + 30;
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + dimY;
  		var dx1 = x;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var ax1 = bx;
  		var ay1 = by;
  		var bx1 = bx + 30;
  		var by1 = ay1;
  		var cx1 = bx1;
  		var cy1 = ay1 + dimY;
  		var dx1 = bx;
  		var dy1 = cy1;
  		drawType.triangle(ax1,ay1,0,bx1,by1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx1,by1,0,cx1,cy1,0,dx1,dy1,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		count += 2;
  		var beta = -pi;
  		var gamma = -pi_2;
  		var pi1 = Math.PI;
  		var step = pi1 * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.CLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(beta >= 0 && beta > Math.PI) {
  				f = beta;
  			} else {
  				var a = beta % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = beta;
  		var cx1;
  		var cy1;
  		var bx1 = 0;
  		var by1 = 0;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx1 = ax + 30 * Math.sin(angle);
  			cy1 = ay + 30 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(ax,ay,0,bx1,by1,0,cx1,cy1,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx1 = cx1;
  			by1 = cy1;
  		}
  		count += totalSteps;
  		var pi1 = Math.PI;
  		var step = pi1 * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.CLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(pi >= 0 && pi > Math.PI) {
  				f = pi;
  			} else {
  				var a = pi % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = pi_2;
  		var cx1;
  		var cy1;
  		var bx1 = 0;
  		var by1 = 0;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx1 = bx + 30 * Math.sin(angle);
  			cy1 = by + 30 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(bx,by,0,bx1,by1,0,cx1,cy1,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx1 = cx1;
  			by1 = cy1;
  		}
  		count += totalSteps;
  		var pi = Math.PI;
  		var step = pi * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.ANTICLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(pi_2 >= 0 && pi_2 > Math.PI) {
  				f = pi_2;
  			} else {
  				var a = pi_2 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = pi_2;
  		var cx1;
  		var cy1;
  		var bx = 0;
  		var by = 0;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx1 = cx + 30 * Math.sin(angle);
  			cy1 = cy + 30 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(cx,cy,0,bx,by,0,cx1,cy1,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx = cx1;
  			by = cy1;
  		}
  		count += totalSteps;
  		var gamma = -pi_2;
  		var pi = Math.PI;
  		var step = pi * 2 / 36;
  		var dif;
  		switch(fracs_DifferencePreference.ANTICLOCKWISE._hx_index) {
  		case 0:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 > 0 ? dif1 : 2 * Math.PI + dif1;
  			break;
  		case 1:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = dif1 < 0 ? dif1 : -2 * Math.PI + dif1;
  			break;
  		case 2:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var smallest = theta <= Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = smallest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		case 3:
  			var f;
  			if(0 > Math.PI) {
  				f = 0;
  			} else {
  				var a = 0 % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var za = this1;
  			var f;
  			if(gamma >= 0 && gamma > Math.PI) {
  				f = gamma;
  			} else {
  				var a = gamma % (2 * Math.PI);
  				f = a >= 0 ? a : a + 2 * Math.PI;
  			}
  			var this1 = f;
  			var zb = this1;
  			var fa = za;
  			var fb = zb;
  			var theta = Math.abs(fa - fb);
  			var largest = theta > Math.PI;
  			var clockwise = fa < fb;
  			var dif1 = clockwise ? theta : -theta;
  			dif = largest ? dif1 : clockwise ? -(2 * Math.PI - theta) : 2 * Math.PI - theta;
  			break;
  		}
  		var positive = dif >= 0;
  		var totalSteps = Math.ceil(Math.abs(dif) / step);
  		var step = dif / totalSteps;
  		var angle = 0;
  		var cx;
  		var cy;
  		var bx = 0;
  		var by = 0;
  		var _g = 0;
  		var _g1 = totalSteps + 1;
  		while(_g < _g1) {
  			var i = _g++;
  			cx = dx + 30 * Math.sin(angle);
  			cy = dy + 30 * Math.cos(angle);
  			if(i != 0) {
  				drawType.triangle(dx,dy,0,bx,by,0,cx,cy,0);
  				var m = trilateral3_Trilateral.transformMatrix;
  				if(m != null) {
  					drawType.transform(m);
  				}
  				drawType.next();
  			}
  			angle += step;
  			bx = cx;
  			by = cy;
  		}
  		var len = count += totalSteps;
  		var _this = this.pen;
  		var color = -7077677;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_VioletRoundedRectangle
  });
  var trilateral3Setup_drawings_YellowDiamond = function(pen,layoutPos) {
  	trilateral3Setup_drawings_DrawingLayout.call(this,pen,layoutPos);
  };
  trilateral3Setup_drawings_YellowDiamond.__name__ = true;
  trilateral3Setup_drawings_YellowDiamond.__super__ = trilateral3Setup_drawings_DrawingLayout;
  trilateral3Setup_drawings_YellowDiamond.prototype = $extend(trilateral3Setup_drawings_DrawingLayout.prototype,{
  	draw: function() {
  		var drawType = this.pen.drawType;
  		var x = (this.topLeft.x + this.centre.x) / 2;
  		var y = (this.topLeft.y + this.centre.y) / 2;
  		var radius = 0.7 * this.size;
  		var theta = Math.PI / 4;
  		if(theta == null) {
  			theta = 0;
  		}
  		var ax = 0.;
  		var ay = 0.;
  		var bx = 0.;
  		var by = 0.;
  		var cx = 0.;
  		var cy = 0.;
  		var dx = 0.;
  		var dy = 0.;
  		if(theta != 0) {
  			var pi = Math.PI;
  			var pi4 = pi / 4;
  			var pi2 = pi / 2;
  			var sqrt2 = Math.sqrt(2);
  			var r = radius * sqrt2;
  			var aTheta = -pi + theta - pi4;
  			var dTheta = -pi + theta + pi / 2 - pi / 4;
  			var cTheta = theta - pi4;
  			var bTheta = -pi + theta - pi2 - pi4;
  			ax = x + r * Math.sin(aTheta);
  			ay = y + r * Math.cos(aTheta);
  			bx = x + r * Math.sin(bTheta);
  			by = y + r * Math.cos(bTheta);
  			cx = x + r * Math.sin(cTheta);
  			cy = y + r * Math.cos(cTheta);
  			dx = x + r * Math.sin(dTheta);
  			dy = y + r * Math.cos(dTheta);
  		} else {
  			ax = x - radius;
  			ay = y - radius;
  			var lx = radius * 2;
  			var ly = lx;
  			bx = ax + lx;
  			by = ay;
  			cx = bx;
  			cy = ay + ly;
  			dx = ax;
  			dy = cy;
  		}
  		drawType.triangle(ax,ay,0,bx,by,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		drawType.triangle(bx,by,0,cx,cy,0,dx,dy,0);
  		var m = trilateral3_Trilateral.transformMatrix;
  		if(m != null) {
  			drawType.transform(m);
  		}
  		drawType.next();
  		var len = 2;
  		var _this = this.pen;
  		var color = -256;
  		if(color == -1) {
  			color = _this.currentColor;
  		}
  		_this.colorType.colorTriangles(color,len);
  	}
  	,__class__: trilateral3Setup_drawings_YellowDiamond
  });
  var trilateral3Setup_helpers_AxisKeys = function(axisModel_) {
  	this.axisModel = axisModel_;
  	this.characterInput = new htmlHelper_tools_CharacterInput();
  	this.characterInput.commandSignal = $bind(this,this.commandDown);
  	this.characterInput.navSignal = $bind(this,this.navDown);
  	this.characterInput.letterSignal = $bind(this,this.letterDown);
  };
  trilateral3Setup_helpers_AxisKeys.__name__ = true;
  trilateral3Setup_helpers_AxisKeys.prototype = {
  	commandDown: function() {
  		if(this.characterInput.cmdDown) {
  			var v = 1.;
  			var _this = this.axisModel.rz;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else if(this.characterInput.altDown) {
  			var v = -1.;
  			var _this = this.axisModel.rz;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else {
  			var v = 0.;
  			var _this = this.axisModel.rz;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		}
  		if(this.characterInput.tabDown) {
  			var v = -1.;
  			var _this = this.axisModel.ty;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else if(this.characterInput.shiftDown) {
  			var v = 1.;
  			var _this = this.axisModel.ty;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else {
  			var v = 0.;
  			var _this = this.axisModel.ty;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		}
  		if(this.characterInput.spaceDown) {
  			var v = -1.;
  			var _this = this.axisModel.tx;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else if(this.characterInput.controlDown) {
  			var v = 1.;
  			var _this = this.axisModel.tx;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else {
  			var v = 0.;
  			var _this = this.axisModel.tx;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		}
  		if(this.characterInput.deleteDown) {
  			var v = -1.;
  			var _this = this.axisModel.tz;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else if(this.characterInput.enterDown) {
  			var v = 1.;
  			var _this = this.axisModel.tz;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else {
  			var v = 0.;
  			var _this = this.axisModel.tz;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		}
  		haxe_Log.trace(this.characterInput.commandDown(),{ fileName : "src/trilateral3Setup/helpers/AxisKeys.hx", lineNumber : 40, className : "trilateral3Setup.helpers.AxisKeys", methodName : "commandDown"});
  	}
  	,navDown: function() {
  		haxe_Log.trace(this.characterInput.navDown(),{ fileName : "src/trilateral3Setup/helpers/AxisKeys.hx", lineNumber : 44, className : "trilateral3Setup.helpers.AxisKeys", methodName : "navDown"});
  		if(this.characterInput.leftDown) {
  			var v = -1.;
  			var _this = this.axisModel.ry;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else if(this.characterInput.rightDown) {
  			var v = 1.;
  			var _this = this.axisModel.ry;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else {
  			var v = 0.;
  			var _this = this.axisModel.ry;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		}
  		if(this.characterInput.upDown) {
  			var v = -1.;
  			var _this = this.axisModel.rx;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else if(this.characterInput.downDown) {
  			var v = 1.;
  			var _this = this.axisModel.rx;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		} else {
  			var v = 0.;
  			var _this = this.axisModel.rx;
  			_this.trinary.set_trit(v);
  			if(_this.trinary.changed) {
  				if(v == 0.) {
  					_this.value = 0.;
  				} else {
  					var f = v;
  					_this.value = -f * _this.step;
  				}
  			}
  		}
  	}
  	,letterDown: function(letter) {
  		if(letter == "r" || letter == "p") {
  			var _this = this.axisModel;
  			_this.rx.value = 0.;
  			_this.ry.value = 0.;
  			_this.rz.value = 0.;
  			_this.tx.value = 0.;
  			_this.ty.value = 0.;
  			_this.tz.value = 0.;
  			haxe_Log.trace("reset",{ fileName : "src/trilateral3Setup/helpers/AxisKeys.hx", lineNumber : 58, className : "trilateral3Setup.helpers.AxisKeys", methodName : "letterDown"});
  			if(this.reset != null) {
  				this.reset();
  			}
  		}
  	}
  	,__class__: trilateral3Setup_helpers_AxisKeys
  };
  var trilateral3Setup_helpers_LayoutPos = function(stageRadius_) {
  	this.stageRadius = stageRadius_;
  	this.centre = new geom_structure_Mat1x2(this.stageRadius,this.stageRadius);
  	this.quarter = this.stageRadius / 2;
  	this.bottomLeft = new geom_structure_Mat1x2(this.stageRadius - this.quarter,this.stageRadius + this.quarter);
  	this.bottomRight = new geom_structure_Mat1x2(this.stageRadius + this.quarter,this.stageRadius + this.quarter);
  	this.topLeft = new geom_structure_Mat1x2(this.stageRadius - this.quarter,this.stageRadius - this.quarter);
  	this.topRight = new geom_structure_Mat1x2(this.stageRadius + this.quarter,this.stageRadius - this.quarter);
  };
  trilateral3Setup_helpers_LayoutPos.__name__ = true;
  trilateral3Setup_helpers_LayoutPos.prototype = {
  	__class__: trilateral3Setup_helpers_LayoutPos
  };
  function $bind(o,m) { if( m == null ) return null; if( m.__id__ == null ) m.__id__ = $global.$haxeUID++; var f; if( o.hx__closures__ == null ) o.hx__closures__ = {}; else f = o.hx__closures__[m.__id__]; if( f == null ) { f = m.bind(o); o.hx__closures__[m.__id__] = f; } return f; }
  $global.$haxeUID |= 0;
  String.prototype.__class__ = String;
  String.__name__ = true;
  Array.__name__ = true;
  var Int = { };
  var Dynamic = { };
  var Float = Number;
  var Bool = Boolean;
  var Class = { };
  var Enum = { };
  hxGeomAlgo_PolyTools.exposeEnum(hxGeomAlgo_WindingRule);
  hxGeomAlgo_PolyTools.exposeEnum(hxGeomAlgo_ResultType);
  js_Boot.__toStr = ({ }).toString;
  htmlHelper_tools_AnimateTimer.counter = 0;
  htmlHelper_webgl_WebGLSetup.posName = "pos";
  htmlHelper_webgl_WebGLSetup.colorName = "color";
  htmlHelper_webgl_WebGLSetup.textureName = "aTexture";
  hxGeomAlgo_HxPoint.EMPTY = hxGeomAlgo_HxPoint._new(NaN,NaN);
  hxGeomAlgo_PolyTools.point = hxGeomAlgo_HxPoint._new();
  hxGeomAlgo_PolyTools.zero = hxGeomAlgo_HxPoint._new(0,0);
  hxGeomAlgo_PolyTools.EPSILON = .00000001;
  var trilateral3_math_Algebra_quadStep = 0.03;
  trilateral3Setup_Main.largeEnough = 2000000;
  trilateral3Setup_Main.main();
  })(typeof exports != "undefined" ? exports : typeof window != "undefined" ? window : typeof self != "undefined" ? self : this, typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this);
  