===========================================================
                                      .___ __  __   
          _________________  __ __  __| _/|__|/  |_ 
         / ___\_` __ \__  \ |  |  \/ __ | | \\_  __\
        / /_/  >  | \// __ \|  |  / /_/ | |  ||  |  
        \___  /|__|  (____  /____/\____ | |__||__|  
       /_____/            \/           \/           
              grep rough audit - static analysis tool
                  v2.8 written by @Wireghoul
=================================[justanotherhacker.com]===
asymptote-2.67/doc/install-sh-217-      fi
asymptote-2.67/doc/install-sh:218:      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
asymptote-2.67/doc/install-sh-219-    *)
##############################################
asymptote-2.67/doc/install-sh-269-      dstdir=$dst
asymptote-2.67/doc/install-sh:270:      dst=$dstdir/`basename "$src"`
asymptote-2.67/doc/install-sh-271-      dstdir_status=0
##############################################
asymptote-2.67/doc/install-sh-351-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
asymptote-2.67/doc/install-sh:352:		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
asymptote-2.67/doc/install-sh-353-		   case $ls_ld_tmpdir in
##############################################
asymptote-2.67/doc/install-sh-358-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
asymptote-2.67/doc/install-sh:359:		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
asymptote-2.67/doc/install-sh-360-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
##############################################
asymptote-2.67/doc/install-sh-418-	    case $prefix in
asymptote-2.67/doc/install-sh:419:	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
asymptote-2.67/doc/install-sh-420-	      *) qprefix=$prefix;;
##############################################
asymptote-2.67/doc/install-sh-467-    if $copy_on_change &&
asymptote-2.67/doc/install-sh:468:       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
asymptote-2.67/doc/install-sh:469:       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
asymptote-2.67/doc/install-sh-470-
##############################################
asymptote-2.67/doc/latexmkrc:1:sub asy {return system("asy \"$_[0]\"");}
asymptote-2.67/doc/latexmkrc-2-add_cus_dep("asy","eps",0,"asy");
##############################################
asymptote-2.67/doc/FAQ/install-sh-217-      fi
asymptote-2.67/doc/FAQ/install-sh:218:      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
asymptote-2.67/doc/FAQ/install-sh-219-    *)
##############################################
asymptote-2.67/doc/FAQ/install-sh-269-      dstdir=$dst
asymptote-2.67/doc/FAQ/install-sh:270:      dst=$dstdir/`basename "$src"`
asymptote-2.67/doc/FAQ/install-sh-271-      dstdir_status=0
##############################################
asymptote-2.67/doc/FAQ/install-sh-351-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
asymptote-2.67/doc/FAQ/install-sh:352:		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
asymptote-2.67/doc/FAQ/install-sh-353-		   case $ls_ld_tmpdir in
##############################################
asymptote-2.67/doc/FAQ/install-sh-358-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
asymptote-2.67/doc/FAQ/install-sh:359:		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
asymptote-2.67/doc/FAQ/install-sh-360-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
##############################################
asymptote-2.67/doc/FAQ/install-sh-418-	    case $prefix in
asymptote-2.67/doc/FAQ/install-sh:419:	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
asymptote-2.67/doc/FAQ/install-sh-420-	      *) qprefix=$prefix;;
##############################################
asymptote-2.67/doc/FAQ/install-sh-467-    if $copy_on_change &&
asymptote-2.67/doc/FAQ/install-sh:468:       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
asymptote-2.67/doc/FAQ/install-sh:469:       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
asymptote-2.67/doc/FAQ/install-sh-470-
##############################################
asymptote-2.67/doc/FAQ/m-html.pl-29-    $html_prefix =~ s:^\.//:/:;
asymptote-2.67/doc/FAQ/m-html.pl:30:    system('rm','-r',"$html_prefix.html");
asymptote-2.67/doc/FAQ/m-html.pl:31:    system('mkdir',"$html_prefix.html");
asymptote-2.67/doc/FAQ/m-html.pl-32-    open(HTML,">$html_prefix.html/index.html");
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-65-
asymptote-2.67/doc/FAQ/bfnnconv.pl:66:for $x (@outputs) { require("./m-$x.pl"); }
asymptote-2.67/doc/FAQ/bfnnconv.pl-67-
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-143-                } else {
asymptote-2.67/doc/FAQ/bfnnconv.pl:144:                  $it= `$cmd`; chop $it;
asymptote-2.67/doc/FAQ/bfnnconv.pl-145-                }
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-180-        $svalue= $'; $svari= $1;
asymptote-2.67/doc/FAQ/bfnnconv.pl:181:        eval("\$user_$svari=\$svalue"); $@ && warn "setting $svalue failed: $@\n";
asymptote-2.67/doc/FAQ/bfnnconv.pl-182-    } elsif (m/^\\verbatim$/) {
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-267-    for $coutput (@outputs) {
asymptote-2.67/doc/FAQ/bfnnconv.pl:268:        if ($fnbase eq 'text' && eval("\@${coutput}_cmds")) {
asymptote-2.67/doc/FAQ/bfnnconv.pl-269-#print STDERR "special handling text (@callargs) for $coutput\n";
asymptote-2.67/doc/FAQ/bfnnconv.pl-270-            $evstrg= "\$${coutput}_args[\$#${coutput}_args].=\"\@callargs\"";
asymptote-2.67/doc/FAQ/bfnnconv.pl:271:            eval($evstrg);
asymptote-2.67/doc/FAQ/bfnnconv.pl-272-            length($@) && warn "call adding for $coutput (($evstrg)): $@";
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-290-    $cmd= $_[0];
asymptote-2.67/doc/FAQ/bfnnconv.pl:291:    eval("push(\@${coutput}_cmds,\$cmd); push(\@${coutput}_args,'')");
asymptote-2.67/doc/FAQ/bfnnconv.pl-292-    length($@) && warn "arg setting up for $coutput: $@";
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-298-             "\$${coutput}_arg= \$arg= pop(\@${coutput}_args); ";
asymptote-2.67/doc/FAQ/bfnnconv.pl:299:    eval($evstrg);
asymptote-2.67/doc/FAQ/bfnnconv.pl-300-    length($@) && warn "endarg extracting for $coutput (($evstrg)): $@";
##############################################
asymptote-2.67/doc/FAQ/bfnnconv.pl-302-    $evstrg= "&${coutput}_do_${cmd}(\$arg)";
asymptote-2.67/doc/FAQ/bfnnconv.pl:303:    eval($evstrg);
asymptote-2.67/doc/FAQ/bfnnconv.pl-304-    length($@) && warn "endarg running ${coutput}_do_${cmd} (($evstrg)): $@";
##############################################
asymptote-2.67/doc/latexmkrc_asydir:1:sub asy {return system("asy -o asy/ '$_[0]'");}
asymptote-2.67/doc/latexmkrc_asydir-2-add_cus_dep("asy","eps",0,"asy");
##############################################
asymptote-2.67/install-sh-217-      fi
asymptote-2.67/install-sh:218:      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
asymptote-2.67/install-sh-219-    *)
##############################################
asymptote-2.67/install-sh-269-      dstdir=$dst
asymptote-2.67/install-sh:270:      dst=$dstdir/`basename "$src"`
asymptote-2.67/install-sh-271-      dstdir_status=0
##############################################
asymptote-2.67/install-sh-351-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
asymptote-2.67/install-sh:352:		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
asymptote-2.67/install-sh-353-		   case $ls_ld_tmpdir in
##############################################
asymptote-2.67/install-sh-358-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
asymptote-2.67/install-sh:359:		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
asymptote-2.67/install-sh-360-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
##############################################
asymptote-2.67/install-sh-418-	    case $prefix in
asymptote-2.67/install-sh:419:	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
asymptote-2.67/install-sh-420-	      *) qprefix=$prefix;;
##############################################
asymptote-2.67/install-sh-467-    if $copy_on_change &&
asymptote-2.67/install-sh:468:       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
asymptote-2.67/install-sh:469:       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
asymptote-2.67/install-sh-470-
##############################################
asymptote-2.67/install-sh-527-    if $copy_on_change &&
asymptote-2.67/install-sh:528:       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
asymptote-2.67/install-sh:529:       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
asymptote-2.67/install-sh-530-       set -f &&
##############################################
asymptote-2.67/base/webgl/asygl.js-38-THE SOFTWARE.*/
asymptote-2.67/base/webgl/asygl.js:39:let vertex="\nattribute vec3 position;\n#ifdef WIDTH\nattribute float width;\n#endif\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\nattribute float materialIndex;\n#ifdef COLOR\nattribute vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\n#endif\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\nvarying vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif      \n  Normal=normalize(normal*normMat);\n        \n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0) {\n    diffuse=m.diffuse;\n  } else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif\n#endif\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\n\nfloat Roughness2;\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n    \nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n    \nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n    \nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n    \n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n      \n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegali=max(dot(lightDirection,normal),0.0);\n      \n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n      \n  float denom=4.0*omegain*omegali;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n      \n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n      \n  return mix(dielectric,metal,metallic);\n}\n#endif\nvarying vec4 emissive;\n    \nvoid main(void)\n{\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n  Roughness2=roughness*roughness;\n  vec3 color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n  gl_FragColor=vec4(color,diffuse.a);\n#else\n  gl_FragColor=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var a in i)("object"==typeof exports?exports:t)[a]=i[a]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,a){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:a})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=a*Math.max(1,Math.abs(t),Math.abs(e))};var a=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var a=n(i(2)),r=n(i(3));function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=a,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*s-o*l,m=-c*n+o*h,f=l*n-s*h,u=i*d+a*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*a+r*l)*u,t[2]=(o*a-r*s)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*n)*u,t[6]=f*u,t[7]=(-l*i+a*h)*u,t[8]=(s*i-a*n)*u,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],g=e[15],x=i*o-a*s,w=i*h-r*s,M=i*l-n*s,b=a*h-r*o,S=a*l-n*o,P=r*l-n*h,A=c*p-d*u,y=c*v-m*u,T=c*g-f*u,R=d*v-m*p,D=d*g-f*p,I=m*g-f*v,z=x*I-w*D+M*R+b*T-S*y+P*A;if(!z)return null;return z=1/z,t[0]=(o*I-h*D+l*R)*z,t[1]=(r*D-a*I-n*R)*z,t[2]=(p*P-v*S+g*b)*z,t[3]=(m*S-d*P-f*b)*z,t[4]=(h*T-s*I-l*y)*z,t[5]=(i*I-r*T+n*y)*z,t[6]=(v*M-u*P-g*w)*z,t[7]=(c*P-m*M+f*w)*z,t[8]=(s*D-o*T+l*A)*z,t[9]=(a*T-i*D-n*A)*z,t[10]=(u*S-p*M+g*x)*z,t[11]=(d*M-c*S-f*x)*z,t[12]=(o*y-s*R-h*A)*z,t[13]=(i*R-a*y+r*A)*z,t[14]=(p*w-u*b-v*x)*z,t[15]=(c*b-d*w+m*x)*z,t},e.multiply=r,e.translate=function(t,e,i){var a=i[0],r=i[1],n=i[2],s=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0;e===t?(t[12]=e[0]*a+e[4]*r+e[8]*n+e[12],t[13]=e[1]*a+e[5]*r+e[9]*n+e[13],t[14]=e[2]*a+e[6]*r+e[10]*n+e[14],t[15]=e[3]*a+e[7]*r+e[11]*n+e[15]):(s=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],g=e[11],t[0]=s,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=g,t[12]=s*a+c*r+u*n+e[12],t[13]=o*a+d*r+p*n+e[13],t[14]=h*a+m*r+v*n+e[14],t[15]=l*a+f*r+g*n+e[15]);return t},e.rotate=function(t,e,i,r){var n,s,o,h,l,c,d,m,f,u,p,v,g,x,w,M,b,S,P,A,y,T,R,D,I=r[0],z=r[1],L=r[2],N=Math.sqrt(I*I+z*z+L*L);if(Math.abs(N)<a.EPSILON)return null;I*=N=1/N,z*=N,L*=N,n=Math.sin(i),s=Math.cos(i),o=1-s,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],g=e[9],x=e[10],w=e[11],M=I*I*o+s,b=z*I*o+L*n,S=L*I*o-z*n,P=I*z*o-L*n,A=z*z*o+s,y=L*z*o+I*n,T=I*L*o+z*n,R=z*L*o-I*n,D=L*L*o+s,t[0]=h*M+m*b+v*S,t[1]=l*M+f*b+g*S,t[2]=c*M+u*b+x*S,t[3]=d*M+p*b+w*S,t[4]=h*P+m*A+v*y,t[5]=l*P+f*A+g*y,t[6]=c*P+u*A+x*y,t[7]=d*P+p*A+w*y,t[8]=h*T+m*R+v*D,t[9]=l*T+f*R+g*D,t[10]=c*T+u*R+x*D,t[11]=d*T+p*R+w*D,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,n,s,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<a.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),n=Math.cos(e),s=1-n,t[0]=o*o*s+n,t[1]=h*o*s+l*r,t[2]=l*o*s-h*r,t[3]=0,t[4]=o*h*s-l*r,t[5]=h*h*s+n,t[6]=l*h*s+o*r,t[7]=0,t[8]=o*l*s+h*r,t[9]=h*l*s-o*r,t[10]=l*l*s+n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,a,r,n,s){var o=1/(i-e),h=1/(r-a),l=1/(n-s);return t[0]=2*n*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*n*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+a)*h,t[10]=(s+n)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*n*2*l,t[15]=0,t},e.ortho=function(t,e,i,a,r,n,s){var o=1/(e-i),h=1/(a-r),l=1/(n-s);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+a)*h,t[14]=(s+n)*l,t[15]=1,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var a=e[0],r=e[1],n=e[2],s=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],g=e[14],x=e[15],w=i[0],M=i[1],b=i[2],S=i[3];return t[0]=w*a+M*o+b*d+S*p,t[1]=w*r+M*h+b*m+S*v,t[2]=w*n+M*l+b*f+S*g,t[3]=w*s+M*c+b*u+S*x,w=i[4],M=i[5],b=i[6],S=i[7],t[4]=w*a+M*o+b*d+S*p,t[5]=w*r+M*h+b*m+S*v,t[6]=w*n+M*l+b*f+S*g,t[7]=w*s+M*c+b*u+S*x,w=i[8],M=i[9],b=i[10],S=i[11],t[8]=w*a+M*o+b*d+S*p,t[9]=w*r+M*h+b*m+S*v,t[10]=w*n+M*l+b*f+S*g,t[11]=w*s+M*c+b*u+S*x,w=i[12],M=i[13],b=i[14],S=i[15],t[12]=w*a+M*o+b*d+S*p,t[13]=w*r+M*h+b*m+S*v,t[14]=w*n+M*l+b*f+S*g,t[15]=w*s+M*c+b*u+S*x,t}}])}));let canvasWidth,canvasHeight,canvasWidth0,canvasHeight0,b,B,angle,Zoom0,zoom0,viewportmargin,zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,Zoom,maxViewportWidth,maxViewportHeight,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,viewportshift=[0,0],nlights=0,Nmaterials=2,materials=[],pixel=.75,zoomRemeshFactor=1.5,FillFactor=.1;const windowTrim=10;let lastZoom,H,zmin,zmax,size2,ArcballFactor,third=1/3,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),T=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[];class Material{constructor(t,e,i,a,r,n){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=a,this.metallic=r,this.fresnel0=n}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Materials["+e+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(t,e){this.direction=t,this.color=e}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Lights["+e+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelShader=initShader(["WIDTH"]),materialShader=initShader(["NORMAL"]),colorShader=initShader(["NORMAL","COLOR"]),transparentShader=initShader(["NORMAL","COLOR","TRANSPARENT"])}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function noGL(){gl||alert("Could not initialize WebGL")}function saveAttributes(){let t=window.top.document.asygl[alpha];t.gl=gl,t.nlights=Lights.length,t.Nmaterials=Nmaterials,t.maxMaterials=maxMaterials,t.pixelShader=pixelShader,t.materialShader=materialShader,t.colorShader=colorShader,t.transparentShader=transparentShader}function restoreAttributes(){let t=window.top.document.asygl[alpha];gl=t.gl,nlights=t.nlights,Nmaterials=t.Nmaterials,maxMaterials=t.maxMaterials,pixelShader=t.pixelShader,materialShader=t.materialShader,colorShader=t.colorShader,transparentShader=t.transparentShader}function initGL(){if(alpha=Background[3]<1,embedded){let t=window.top.document;null==t.asygl&&(t.asygl=Array(2)),context=canvas.getContext("2d"),offscreen=t.offscreen,offscreen||(offscreen=t.createElement("canvas"),t.offscreen=offscreen),t.asygl[alpha]&&t.asygl[alpha].gl?(restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes())):(gl=offscreen.getContext("webgl",{alpha:alpha}),gl||noGL(),initShaders(),t.asygl[alpha]={},saveAttributes())}else gl=canvas.getContext("webgl",{alpha:alpha}),gl||noGL(),initShaders();indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function getShader(t,e,i,a=[]){let r=`#version 100\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n#else\n  precision mediump float;\n#endif\n  #define nlights ${0==wireframe?Lights.length:0}\n\n  const int Nlights=${Math.max(Lights.length,1)};\n\n  #define Nmaterials ${Nmaterials}\n`;orthographic&&(r+="#define ORTHOGRAPHIC\n"),a.forEach(t=>r+="#define "+t+"\n");let n=t.createShader(i);return t.shaderSource(n,r+e),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)?n:(alert(t.getShaderInfoLog(n)),null)}function registerBuffer(t,e,i,a=gl.ARRAY_BUFFER){return t.length>0&&(0==e&&(e=gl.createBuffer(),i=!0),gl.bindBuffer(a,e),i&&gl.bufferData(a,t,gl.STATIC_DRAW)),e}function drawBuffer(t,e,i=t.indices){if(0==t.indices.length)return;let a=e!=pixelShader;setUniforms(t,e);let r=remesh||t.partial||!t.rendered;t.verticesBuffer=registerBuffer(new Float32Array(t.vertices),t.verticesBuffer,r),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a&&Lights.length>0?gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):pixel&&gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),t.materialsBuffer=registerBuffer(new Int16Array(t.materialIndices),t.materialsBuffer,r),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),e!=colorShader&&e!=transparentShader||(t.colorsBuffer=registerBuffer(new Uint8Array(t.colors),t.colorsBuffer,r),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),t.indicesBuffer=registerBuffer(indexExt?new Uint32Array(i):new Uint16Array(i),t.indicesBuffer,r,gl.ELEMENT_ARRAY_BUFFER),t.rendered=!0,gl.drawElements(a?wireframe?gl.LINES:t.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(t){this.type=t||TRIANGLES,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(t,e,i,a=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=materialIndex;let n=4*t;this.colors[n]=a[0],this.colors[n+1]=a[1],this.colors[n+2]=a[2],this.colors[n+3]=a[3],this.indices.push(t)}append(t){append(this.vertices,t.vertices),append(this.materialIndices,t.materialIndices),append(this.colors,t.colors),appendOffset(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function append(t,e){let i=t.length,a=e.length;t.length+=a;for(let r=0;r<a;++r)t[i+r]=e[r]}function appendOffset(t,e,i){let a=t.length,r=e.length;t.length+=e.length;for(let n=0;n<r;++n)t[a+n]=e[n]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(t){let e=projViewMat,i=t[0],a=i[0],r=i[1],n=i[2],s=1/(e[3]*a+e[7]*r+e[11]*n+e[15]);this.x=this.X=(e[0]*a+e[4]*r+e[8]*n+e[12])*s,this.y=this.Y=(e[1]*a+e[5]*r+e[9]*n+e[13])*s;for(let i=1,a=t.length;i<a;++i){let a=t[i],r=a[0],n=a[1],s=a[2],o=1/(e[3]*r+e[7]*n+e[11]*s+e[15]),h=(e[0]*r+e[4]*n+e[8]*s+e[12])*o,l=(e[1]*r+e[5]*n+e[9]*s+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],a=this.c[2],r=t[0]-e,n=t[1]-i,s=t[2]-a;return[r*normMat[0]+n*normMat[3]+s*normMat[6]+e,r*normMat[1]+n*normMat[4]+s*normMat[7]+i,r*normMat[2]+n*normMat[5]+s*normMat[8]+a]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=Nmaterials&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(Materials[this.MaterialIndex])),materialIndex=t.materialTable[this.MaterialIndex]}render(){let t;if(this.setMaterialIndex(),0==this.CenterIndex?t=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let e,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();e=i}else{let t=i.length;e=Array(t);for(let a=0;a<t;++a)e[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/B[2],r=pixel*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=r*r,this.Epsilon=FillFactor*r,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(e)}}class BezierPatch extends Geometry{constructor(t,e,i,a,r,n){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.color=n,this.CenterIndex=e;let s=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==s||4==s?t+n[3][3]<1020:t<765}else this.transparent=Materials[i].diffuse[3]<1;this.MaterialIndex=i,this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(t){let e=t[0];this.epsilon=0;let i=t.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([t[a][0]-e[0],t[a][1]-e[1],t[a][2]-e[2]]));this.epsilon*=Number.EPSILON}processTriangle(t){let e=t[0],i=t[1],a=t[2],r=unit(cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-e[0],a[1]-e[1],a[2]-e[2]]));if(!this.offscreen([e,i,a])){let t,n,s;this.color?(t=this.data.Vertex(e,r,this.color[0]),n=this.data.Vertex(i,r,this.color[1]),s=this.data.Vertex(a,r,this.color[2])):(t=this.vertex(e,r),n=this.vertex(i,r),s=this.vertex(a,r)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],a=t[2],r=t[3],n=cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-r[0],a[1]-r[1],a[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=unit([n[0]+s[0],n[1]+s[1],n[2]+s[2]]);if(!this.offscreen([e,i,a,r])){let t,n,s,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),n=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),n=this.vertex(i,o),s=this.vertex(a,o),h=this.vertex(r,o)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,a,r){new BezierCurve([t[e],t[i],t[a],t[r]],0,materialIndex,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==wireframe)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],a=t[12],r=t[15],n=this.normal(i,t[2],t[1],e,t[4],t[8],a);abs2(n)<this.epsilon&&(n=this.normal(i,t[2],t[1],e,t[13],t[14],r),abs2(n)<this.epsilon&&(n=this.normal(r,t[11],t[7],i,t[4],t[8],a)));let s=this.normal(e,t[4],t[8],a,t[13],t[14],r);abs2(s)<this.epsilon&&(s=this.normal(e,t[4],t[8],a,t[11],t[7],i),abs2(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(a,t[13],t[14],r,t[11],t[7],i);abs2(o)<this.epsilon&&(o=this.normal(a,t[13],t[14],r,t[2],t[1],e),abs2(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],a,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(abs2(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],a),abs2(h)<this.epsilon&&(h=this.normal(a,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,n,l),u=this.data.Vertex(a,s,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,a,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,n),c=this.vertex(a,s),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,a,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:this.color?colorData.rendered=!1:materialData.rendered=!1}Render(t,e,i,a,r,n,s,o,h,l,c,d,m,f,u,p,v){let g=this.Distance(t);if(g[0]<this.res2&&g[1]<this.res2)this.offscreen([n,s,o])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([n,o,h])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(a),this.data.indices.push(r)):(this.data.indices.push(a),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let x=t[0],w=t[3],M=t[12],b=t[15];if(g[0]<this.res2){let g=new Split3(x,t[1],t[2],w),S=new Split3(t[4],t[5],t[6],t[7]),P=new Split3(t[8],t[9],t[10],t[11]),A=new Split3(M,t[13],t[14],b),y=[x,g.m0,g.m3,g.m5,t[4],S.m0,S.m3,S.m5,t[8],P.m0,P.m3,P.m5,M,A.m0,A.m3,A.m5],T=[g.m5,g.m4,g.m2,w,S.m5,S.m4,S.m2,t[7],P.m5,P.m4,P.m2,t[11],A.m5,A.m4,A.m2,b],R=this.normal(y[12],y[13],y[14],y[15],y[11],y[7],y[3]);abs2(R)<=this.epsilon&&(R=this.normal(y[12],y[13],y[14],y[15],y[2],y[1],y[0]),abs2(R)<=this.epsilon&&(R=this.normal(y[0],y[4],y[8],y[12],y[11],y[7],y[3])));let D=this.normal(T[3],T[2],T[1],T[0],T[4],T[8],T[12]);abs2(D)<=this.epsilon&&(D=this.normal(T[3],T[2],T[1],T[0],T[13],T[14],T[15]),abs2(D)<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12])));let I=this.Epsilon,z=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(T[12],T[8],T[4],T[0]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=y[15];let L=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(x,t[1],t[2],w)<this.res2){let t=unit(this.differential(y[3],y[7],y[11],y[15]));L=[L[0]-I*t[0],L[1]-I*t[1],L[2]-I*t[2]]}else L=T[0];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),g[e]=.5*(v[e]+f[e]);let x=this.data.Vertex(z,R,t),w=this.data.Vertex(L,D,g);this.Render(y,e,i,x,w,n,s,z,L,l,c,!1,m,f,u,t,g),this.Render(T,w,x,a,r,L,z,o,h,!1,c,d,m,g,t,p,v)}else{let t=this.vertex(z,R),f=this.vertex(L,D);this.Render(y,e,i,t,f,n,s,z,L,l,c,!1,m),this.Render(T,f,t,a,r,L,z,o,h,!1,c,d,m)}return}if(g[1]<this.res2){let g=new Split3(x,t[4],t[8],M),S=new Split3(t[1],t[5],t[9],t[13]),P=new Split3(t[2],t[6],t[10],t[14]),A=new Split3(w,t[7],t[11],b),y=[x,t[1],t[2],w,g.m0,S.m0,P.m0,A.m0,g.m3,S.m3,P.m3,A.m3,g.m5,S.m5,P.m5,A.m5],T=[g.m5,S.m5,P.m5,A.m5,g.m4,S.m4,P.m4,A.m4,g.m2,S.m2,P.m2,A.m2,M,t[13],t[14],b],R=this.normal(y[0],y[4],y[8],y[12],y[13],y[14],y[15]);abs2(R)<=this.epsilon&&(R=this.normal(y[0],y[4],y[8],y[12],y[11],y[7],y[3]),abs2(R)<=this.epsilon&&(R=this.normal(y[3],y[2],y[1],y[0],y[13],y[14],y[15])));let D=this.normal(T[15],T[11],T[7],T[3],T[2],T[1],T[0]);abs2(D)<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]),abs2(D)<=this.epsilon&&(D=this.normal(T[12],T[13],T[14],T[15],T[2],T[1],T[0])));let I=this.Epsilon,z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(x,t[4],t[8],M)<this.res2){let t=unit(this.differential(T[0],T[1],T[2],T[3]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=y[12];let L=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(b,t[11],t[7],w)<this.res2){let t=unit(this.differential(y[15],y[14],y[13],y[12]));L=[L[0]-I*t[0],L[1]-I*t[1],L[2]-I*t[2]]}else L=T[3];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(p[e]+v[e]);let x=this.data.Vertex(z,R,t),w=this.data.Vertex(L,D,g);this.Render(y,e,x,w,r,n,z,L,h,l,!1,d,m,f,t,g,v),this.Render(T,x,i,a,w,z,s,o,L,l,c,d,!1,t,u,p,g)}else{let t=this.vertex(z,R),f=this.vertex(L,D);this.Render(y,e,t,f,r,n,z,L,h,l,!1,d,m),this.Render(T,t,i,a,f,z,s,o,L,l,c,d,!1)}return}let S=new Split3(x,t[1],t[2],w),P=new Split3(t[4],t[5],t[6],t[7]),A=new Split3(t[8],t[9],t[10],t[11]),y=new Split3(M,t[13],t[14],b),T=new Split3(x,t[4],t[8],M),R=new Split3(S.m0,P.m0,A.m0,y.m0),D=new Split3(S.m3,P.m3,A.m3,y.m3),I=new Split3(S.m5,P.m5,A.m5,y.m5),z=new Split3(S.m4,P.m4,A.m4,y.m4),L=new Split3(S.m2,P.m2,A.m2,y.m2),N=new Split3(w,t[7],t[11],b),E=[x,S.m0,S.m3,S.m5,T.m0,R.m0,D.m0,I.m0,T.m3,R.m3,D.m3,I.m3,T.m5,R.m5,D.m5,I.m5],O=[T.m5,R.m5,D.m5,I.m5,T.m4,R.m4,D.m4,I.m4,T.m2,R.m2,D.m2,I.m2,M,y.m0,y.m3,y.m5],V=[I.m5,z.m5,L.m5,N.m5,I.m4,z.m4,L.m4,N.m4,I.m2,z.m2,L.m2,N.m2,y.m5,y.m4,y.m2,b],C=[S.m5,S.m4,S.m2,w,I.m0,z.m0,L.m0,N.m0,I.m3,z.m3,L.m3,N.m3,I.m5,z.m5,L.m5,N.m5],B=E[15],H=this.normal(E[0],E[4],E[8],E[12],E[13],E[14],E[15]);abs2(H)<this.epsilon&&(H=this.normal(E[0],E[4],E[8],E[12],E[11],E[7],E[3]),abs2(H)<this.epsilon&&(H=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15])));let _=this.normal(O[12],O[13],O[14],O[15],O[11],O[7],O[3]);abs2(_)<this.epsilon&&(_=this.normal(O[12],O[13],O[14],O[15],O[2],O[1],O[0]),abs2(_)<this.epsilon&&(_=this.normal(O[0],O[4],O[8],O[12],O[11],O[7],O[3])));let F=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);abs2(F)<this.epsilon&&(F=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),abs2(F)<this.epsilon&&(F=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let G=this.normal(C[3],C[2],C[1],C[0],C[4],C[8],C[12]);abs2(G)<this.epsilon&&(G=this.normal(C[3],C[2],C[1],C[0],C[13],C[14],C[15]),abs2(G)<this.epsilon&&(G=this.normal(C[15],C[11],C[7],C[3],C[4],C[8],C[12])));let W=this.normal(V[3],V[2],V[1],B,V[4],V[8],V[12]),U=this.Epsilon,Z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(x,t[4],t[8],M)<this.res2){let t=unit(this.differential(O[0],O[1],O[2],O[3]));Z=[Z[0]-U*t[0],Z[1]-U*t[1],Z[2]-U*t[2]]}else Z=E[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-U*t[0],j[1]-U*t[1],j[2]-U*t[2]]}else j=O[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(b,t[11],t[7],w)<this.res2){let t=unit(this.differential(C[15],C[14],C[13],C[12]));k=[k[0]-U*t[0],k[1]-U*t[1],k[2]-U*t[2]]}else k=V[3];let Y=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(x,t[1],t[2],w)<this.res2){let t=unit(this.differential(E[3],E[7],E[11],E[15]));Y=[Y[0]-U*t[0],Y[1]-U*t[1],Y[2]-U*t[2]]}else Y=C[0];if(f){let t=Array(4),g=Array(4),x=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(u[e]+p[e]),x[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+x[e]);let b=this.data.Vertex(Z,H,t),S=this.data.Vertex(j,_,g),P=this.data.Vertex(k,F,x),A=this.data.Vertex(Y,G,w),y=this.data.Vertex(B,W,M);this.Render(E,e,b,y,A,n,Z,B,Y,l,!1,!1,m,f,t,M,w),this.Render(O,b,i,S,y,Z,s,j,B,l,c,!1,!1,t,u,g,M),this.Render(V,y,S,a,P,B,j,o,k,!1,c,d,!1,M,g,p,x),this.Render(C,A,y,P,r,Y,B,k,h,!1,!1,d,m,w,M,x,v)}else{let t=this.vertex(Z,H),f=this.vertex(j,_),u=this.vertex(k,F),p=this.vertex(Y,G),v=this.vertex(B,W);this.Render(E,e,t,v,p,n,Z,B,Y,l,!1,!1,m),this.Render(O,t,i,f,v,Z,s,j,B,l,c,!1,!1),this.Render(V,v,f,a,u,B,j,o,k,!1,c,d,!1),this.Render(C,p,v,u,r,Y,B,k,h,!1,!1,d,m)}}}process3(t){if(1==wireframe)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],a=t[9],r=this.normal(a,t[5],t[2],e,t[1],t[3],i),n=this.normal(e,t[1],t[3],i,t[7],t[8],a),s=this.normal(i,t[7],t[8],a,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,n,h),m=this.data.Vertex(a,s,l);this.Render3(t,c,d,m,e,i,a,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,n),l=this.vertex(a,s);this.Render3(t,o,h,l,e,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,a,r,n,s,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,n,s])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],g=t[4],x=t[5],w=t[6],M=t[7],b=t[8],S=t[9],P=[.5*(S[0]+x[0]),.5*(S[1]+x[1]),.5*(S[2]+x[2])],A=[.5*(S[0]+b[0]),.5*(S[1]+b[1]),.5*(S[2]+b[2])],y=[.5*(x[0]+p[0]),.5*(x[1]+p[1]),.5*(x[2]+p[2])],T=[.5*(b[0]+g[0]),.5*(b[1]+g[1]),.5*(b[2]+g[2])],R=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],D=[.5*(p[0]+g[0]),.5*(p[1]+g[1]),.5*(p[2]+g[2])],I=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],z=[.5*(g[0]+v[0]),.5*(g[1]+v[1]),.5*(g[2]+v[2])],L=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],N=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],E=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],O=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(P[0]+y[0]),.5*(P[1]+y[1]),.5*(P[2]+y[2])],C=[.5*(A[0]+R[0]),.5*(A[1]+R[1]),.5*(A[2]+R[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],H=[.5*T[0]+.25*(g[0]+u[0]),.5*T[1]+.25*(g[1]+u[1]),.5*T[2]+.25*(g[2]+u[2])],_=[.5*(R[0]+L[0]),.5*(R[1]+L[1]),.5*(R[2]+L[2])],F=[.5*D[0]+.25*(g[0]+M[0]),.5*D[1]+.25*(g[1]+M[1]),.5*D[2]+.25*(g[2]+M[2])],G=[.25*(x[0]+g[0])+.5*z[0],.25*(x[1]+g[1])+.5*z[1],.25*(x[2]+g[2])+.5*z[2]],W=[.5*(N[0]+E[0]),.5*(N[1]+E[1]),.5*(N[2]+E[2])],U=[.5*(E[0]+O[0]),.5*(E[1]+O[1]),.5*(E[2]+O[2])],Z=[.5*(F[0]+W[0]),.5*(F[1]+W[1]),.5*(F[2]+W[2])],j=[.5*(F[0]+U[0]),.5*(F[1]+U[1]),.5*(F[2]+U[2])],k=[.5*(W[0]+U[0]),.5*(W[1]+U[1]),.5*(W[2]+U[2])],Y=[.5*(G[0]+_[0]),.5*(G[1]+_[1]),.5*(G[2]+_[2])],X=[.5*(C[0]+G[0]),.5*(C[1]+G[1]),.5*(C[2]+G[2])],q=[.5*(C[0]+_[0]),.5*(C[1]+_[1]),.5*(C[2]+_[2])],K=[.5*(V[0]+H[0]),.5*(V[1]+H[1]),.5*(V[2]+H[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],Q=[.5*(V[0]+B[0]),.5*(V[1]+B[1]),.5*(V[2]+B[2])],J=[f,N,I,W,[.5*(D[0]+N[0]),.5*(D[1]+N[1]),.5*(D[2]+N[2])],B,k,Z,$,Q],tt=[k,U,j,O,[.5*(z[0]+L[0]),.5*(z[1]+L[1]),.5*(z[2]+L[2])],Y,w,L,_,q],et=[Q,K,V,X,[.5*(P[0]+T[0]),.5*(P[1]+T[1]),.5*(P[2]+T[2])],P,q,C,A,S],it=[q,X,Y,K,[.25*(y[0]+R[0]+E[0]+g[0]),.25*(y[1]+R[1]+E[1]+g[1]),.25*(y[2]+R[2]+E[2]+g[2])],j,Q,$,Z,k],at=this.normal(k,j,Y,q,X,K,Q),rt=this.normal(q,X,K,Q,$,Z,k),nt=this.normal(Q,$,Z,k,j,Y,q),st=this.Epsilon,ot=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!o)if(o=Straightness(w,M,b,S)<this.res2){let t=unit(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-st*t[0],ot[1]-st*t[1],ot[2]-st*t[2]]}else ot=q;let ht=[.5*(s[0]+r[0]),.5*(s[1]+r[1]),.5*(s[2]+r[2])];if(!h)if(h=Straightness(f,p,x,S)<this.res2){let t=unit(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-st*t[0],ht[1]-st*t[1],ht[2]-st*t[2]]}else ht=Q;let lt=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])];if(!l)if(l=Straightness(f,u,v,w)<this.res2){let t=unit(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-st*t[0],lt[1]-st*t[1],lt[2]-st*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,at,t),v=this.data.Vertex(ht,rt,f),g=this.data.Vertex(lt,nt,u);this.Render3(J,e,g,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,g,i,p,lt,n,ot,o,!1,l,u,d,t),this.Render3(et,v,p,a,ht,ot,s,o,h,!1,f,t,m),this.Render3(it,p,v,g,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,at),c=this.vertex(ht,rt),d=this.vertex(lt,nt);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,n,ot,o,!1,l),this.Render3(et,c,t,a,ht,ot,s,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],a=t[12],r=t[15],n=Flatness(e,a,i,r);n=Math.max(Straightness(e,t[4],t[8],a)),n=Math.max(n,Straightness(t[1],t[5],t[9],t[13])),n=Math.max(n,Straightness(i,t[7],t[11],r)),n=Math.max(n,Straightness(t[2],t[6],t[10],t[14]));let s=Flatness(e,i,a,r);return s=Math.max(s,Straightness(e,t[1],t[2],i)),s=Math.max(s,Straightness(t[4],t[5],t[6],t[7])),s=Math.max(s,Straightness(t[8],t[9],t[10],t[11])),s=Math.max(s,Straightness(a,t[13],t[14],r)),[n,s]}Distance3(t){let e=t[0],i=t[4],a=t[6],r=t[9],n=abs2([(e[0]+a[0]+r[0])*third-i[0],(e[1]+a[1]+r[1])*third-i[1],(e[2]+a[2]+r[2])*third-i[2]]);return n=Math.max(n,Straightness(e,t[1],t[3],a)),n=Math.max(n,Straightness(e,t[2],t[5],r)),Math.max(n,Straightness(a,t[7],t[8],r))}differential(t,e,i,a){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return abs2(r)>this.epsilon?r:(r=bezierPP(t,e,i),abs2(r)>this.epsilon?r:bezierPPP(t,e,i,a))}sumdifferential(t,e,i,a,r,n,s){let o=this.differential(t,e,i,a),h=this.differential(t,r,n,s);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,a,r,n,s){let o=3*(r[0]-a[0]),h=3*(r[1]-a[1]),l=3*(r[2]-a[2]),c=3*(i[0]-a[0]),d=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(abs2(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=bezierPP(a,i,e),g=bezierPP(a,r,n),x=cross(g,u),w=cross(p,v);if(f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon)return f;let M=bezierPPP(a,i,e,t),b=bezierPPP(a,r,n,s);x=cross(p,M),w=cross(b,u);let S=cross(g,v);return f=[x[0]+w[0]+S[0],x[1]+w[1]+S[1],x[2]+w[2]+S[2]],abs2(f)>this.epsilon?f:(x=cross(b,v),w=cross(g,M),f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.CenterIndex=e,this.MaterialIndex=i}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],a=t[2],r=t[3],n=this.normal(bezierP(e,i),bezierPP(e,i,a)),s=this.normal(bezierP(a,r),bezierPP(r,a,i)),o=this.data.vertex(e,n),h=this.data.vertex(r,s);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}notRendered(){material1Data.rendered=!1}Render(t,e,i){let a=t[0],r=t[1],n=t[2],s=t[3];if(Straightness(a,r,n,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])],h=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])],l=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[a,o,c,m],u=[m,d,l,s],p=this.normal(bezierPh(a,r,n,s),bezierPPh(a,r,n,s)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=dot(t,t),a=dot(t,e);return[i*e[0]-a*t[0],i*e[1]-a*t[1],i*e[2]-a*t[2]]}}class Pixel extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=r}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}notRendered(){material0Data.rendered=!1}}class Triangles extends Geometry{constructor(t,e,i){super(),this.CenterIndex=0,this.MaterialIndex=t,this.Min=e,this.Max=i,this.Positions=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[t].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(t){materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,e=this.Indices.length;t<e;++t){let e=this.Indices[t],i=e[0],a=this.Positions[i[0]],r=this.Positions[i[1]],n=this.Positions[i[2]];if(!this.offscreen([a,r,n])){let t=e.length>1?e[1]:i;if(t&&0!=t.length||(t=i),this.Colors.length>0){let s=e.length>2?e[2]:i;s&&0!=s.length||(s=i);let o=this.Colors[s[0]],h=this.Colors[s[1]],l=this.Colors[s[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l)):(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[0],a,this.Normals[t[0]],o))}else 0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]])):(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[0],a,this.Normals[t[0]]))}}this.data.nvertices=this.Positions.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:triangleData.rendered=!1}}function redraw(){initProjection(),setProjection(),remesh=!0,draw()}function home(){mat4.identity(rotMat),redraw()}let positionAttribute=0,normalAttribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(t=[]){let e=getShader(gl,vertex,gl.VERTEX_SHADER,t),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,t),a=gl.createProgram();return gl.attachShader(a,e),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),gl.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(t,e,i,a){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),n=.5*(e[1]+i[1]),s=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+n),.5*(this.m0[2]+s)],this.m4=[.5*(r+this.m2[0]),.5*(n+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function abs2(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function dot(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function cross(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bezierP(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function bezierPP(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function bezierPPP(t,e,i,a){return[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}function bezierPh(t,e,i,a){return[i[0]+a[0]-t[0]-e[0],i[1]+a[1]-t[1]-e[1],i[2]+a[2]-t[2]-e[2]]}function bezierPPh(t,e,i,a){return[3*t[0]-5*e[0]+i[0]+a[0],3*t[1]-5*e[1]+i[1]+a[1],3*t[2]-5*e[2]+i[2]+a[2]]}function Straightness(t,e,i,a){let r=[third*(a[0]-t[0]),third*(a[1]-t[1]),third*(a[2]-t[2])];return Math.max(abs2([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),abs2([a[0]-r[0]-i[0],a[1]-r[1]-i[1],a[2]-r[2]-i[2]]))}function Flatness(t,e,i,a){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(r,unit(n))),abs2(cross(n,unit(r))))/9}function corners(t,e){return[t,[t[0],t[1],e[2]],[t[0],e[1],t[2]],[t[0],e[1],e[2]],[e[0],t[1],t[2]],[e[0],t[1],e[2]],[e[0],e[1],t[2]],e]}function minbound(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function maxbound(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function COBTarget(t,e){mat4.fromTranslation(T,[center.x,center.y,center.z]),mat4.invert(cjMatInv,T),mat4.multiply(t,e,cjMatInv),mat4.multiply(t,T,t)}function setUniforms(t,e){let i=e==pixelShader;gl.useProgram(e),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),e.projViewMatUniform=gl.getUniformLocation(e,"projViewMat"),e.viewMatUniform=gl.getUniformLocation(e,"viewMat"),e.normMatUniform=gl.getUniformLocation(e,"normMat"),e!=colorShader&&e!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let t=0;t<Lights.length;++t)Lights[t].setUniform(e,t);for(let i=0;i<t.materials.length;++i)t.materials[i].setUniform(e,i);gl.uniformMatrix4fv(e.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(e.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(e.normMatUniform,!1,normMat)}function handleMouseDown(t){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=t.clientX,lastMouseY=t.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function handleTouchStart(t){t.preventDefault(),zoomEnabled||enableZoom();let e=t.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=e.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=e[0].identifier,lastMouseX=e[0].pageX,lastMouseY=e[0].pageY),2!=e.length||mouseDownOrTouchActive||(touchId=e[0].identifier,pinchStart=pinchDistance(e),pinch=!0))}function handleMouseUpOrTouchEnd(t){mouseDownOrTouchActive=!1}function rotateScene(t,e,i,a,r){if(t==i&&e==a)return;let[n,s]=arcball([t,-e],[i,-a]);mat4.fromRotation(T,2*r*ArcballFactor*n/Zoom,s),mat4.multiply(rotMat,T,rotMat)}function shiftScene(t,e,i,a){let r=1/Zoom;shift.x+=(i-t)*r*halfCanvasWidth,shift.y-=(a-e)*r*halfCanvasHeight}function panScene(t,e,i,a){orthographic?shiftScene(t,e,i,a):(center.x+=(i-t)*(viewParam.xmax-viewParam.xmin),center.y-=(a-e)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;Zoom<=e&&(Zoom=e),Zoom>=t&&(Zoom=t),(zoomRemeshFactor*Zoom<lastZoom||Zoom>zoomRemeshFactor*lastZoom)&&(remesh=!0,lastZoom=Zoom)}function zoomImage(t){let e=zoomStep*halfCanvasHeight*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(e)<i&&(Zoom*=zoomFactor**e,capzoom())}function normMouse(t){let e=t[0],i=t[1],a=Math.hypot(e,i);return a>1&&(denom=1/a,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function arcball(t,e){let i=normMouse(t),a=normMouse(e),r=dot(i,a);return[r>1?0:r<-1?pi:Math.acos(r),unit(cross(i,a))]}function zoomScene(t,e,i,a){zoomImage(e-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(t,e,i,a=1){let r;switch(i){case 1:r=rotateScene;break;case 2:r=shiftScene;break;case 3:r=zoomScene;break;case 4:r=panScene;break;default:r=(t,e,i,a)=>{}}r((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(t-halfCanvasWidth)/halfCanvasWidth,(e-halfCanvasHeight)/halfCanvasHeight,a),lastMouseX=t,lastMouseY=e,setProjection(),draw()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function handleKey(t){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==t.keyCode)return void disableZoom();let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":home();break;case"m":++wireframe,3==wireframe&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders()),remesh=!0,draw();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink()}e.length>0&&(mat4.rotate(rotMat,rotMat,.1,e),updateViewMatrix(),draw())}function setZoom(){capzoom(),setProjection(),draw()}function handleMouseWheel(t){t.preventDefault(),t.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,setZoom()}function handleMouseMove(t){if(!mouseDownOrTouchActive)return;let e,i=t.clientX,a=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,processDrag(i,a,e)}let zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(t){if(t.preventDefault(),zooming)return;let e=t.targetTouches;if(!pinch&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,a=t-lastMouseX,r=i-lastMouseY,n=a*a+r*r<=shiftHoldDistance*shiftHoldDistance;if(n&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(t,i,2);else if(!n){rotate=!0,processDrag(e[0].pageX,e[0].pageY,1,.5)}}if(pinch&&!swipe&&2==e.length&&touchId==e[0].identifier){let t=pinchDistance(e),i=t-pinchStart;zooming=!0,i*=zoomPinchFactor,i>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=t,swipe=rotate=zooming=!1,setProjection(),draw()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(t){let e=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=t.length;for(let r=0;r<t.length;++r){let n=6*r;zbuffer[r]=e*t[n]+i*t[n+1]+a*t[n+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.rendered=!1,triangleData.clear()}function drawTransparent(){let t=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,t),void transparentData.clear();if(t.length>0){transformVertices(transparentData.vertices);let e=t.length/3,i=Array(e).fill().map((t,e)=>e);i.sort((function(e,i){let a=3*e;Ia=t[a],Ib=t[a+1],Ic=t[a+2];let r=3*i;return IA=t[r],IB=t[r+1],IC=t[r+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1}));let a=Array(t.length);for(let r=0;r<e;++r){let e=3*i[r];a[3*r]=t[e],a[3*r+1]=t[e+1],a[3*r+2]=t[e+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,a),transparentData.rendered=!1,gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent()}function draw(){embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let t=0;t<P.length;++t)P[t].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvasWidth,canvasHeight),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(t,e,i,a){let r=t/e,n=1/Zoom,s=(i/t+viewportshift[0])*Zoom,o=(a/e+viewportshift[1])*Zoom;if(orthographic){let t=B[0]-b[0],e=B[1]-b[1];if(t<e*r){let t=.5*e*r*n,i=2*t*s,a=e*n*o;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=b[1]*n-a,viewParam.ymax=B[1]*n-a}else{let e=.5*t/(r*Zoom),i=t*n*s,a=2*e*o;viewParam.xmin=b[0]*n-i,viewParam.xmax=B[0]*n-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}else{let t=H*n,e=t*r,i=2*e*s,a=2*t*o;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix()}function initProjection(){H=-Math.tan(.5*angle)*B[2],center.x=center.y=0,center.z=.5*(b[2]+B[2]),lastZoom=Zoom=zoom0,viewParam.zmin=b[2],viewParam.zmax=B[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewport(.5*(canvas.width-canvasWidth),.5*(canvas.height-canvasHeight),canvasWidth,canvasHeight),gl.scissor(0,0,canvas.width,canvas.height)}function setCanvas(){embedded&&(canvas.width=offscreen.width=canvasWidth,canvas.height=offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvas.width,halfCanvasHeight=.5*canvas.height,ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2}function setsize(t,e){t>maxViewportWidth&&(t=maxViewportWidth),e>maxViewportHeight&&(e=maxViewportHeight),shift.x*=t/canvasWidth,shift.y*=e/canvasHeight,canvasWidth=t,canvasHeight=e,setCanvas(),setViewport(),setProjection(),remesh=!0}function resize(){if(zoom0=Zoom0,absolute&&!embedded)canvasWidth=canvasWidth0*window.devicePixelRatio,canvasHeight=canvasHeight0*window.devicePixelRatio;else{let t=canvasWidth0/canvasHeight0;canvasWidth=Math.max(window.innerWidth-10,10),canvasHeight=Math.max(window.innerHeight-10,10),!orthographic&&canvasWidth<canvasHeight*t&&(zoom0*=canvasWidth/(canvasHeight*t))}canvas.width=canvasWidth,canvas.height=canvasHeight;window.innerWidth,window.innerHeight;viewportshift[0]/=zoom0,viewportshift[1]/=zoom0,setsize(canvasWidth,canvasHeight),redraw()}function expand(){Zoom*=zoomFactor,setZoom()}function shrink(){Zoom/=zoomFactor,setZoom()}class Align{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],a=t[2],r=e*this.ct+a*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+a*this.ct+this.center[2]]}}function Tcorners(t,e,i){let a=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[minbound(a),maxbound(a)]}function sphere(t,e,i,r,n){let s,o,h,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,g=.0549670512339254,x=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,v],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,a*p,v],[g,0,x],[a*p,p,v],[w,w,1],[.05*a,0,1],[0,p,v],[0,g,x],[0,.05*a,1],[0,0,1]]],b=new Align(t,n);function S(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let a=t[i];e[i]=c([s*a[0],o*a[1],h*a[2]])}return e}n?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let A=Tcorners(c,[-e,-e,d],[e,e,e]),y=A[0],T=A[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){o=t*e;for(let t=l;t<=1;t+=2){h=t*e;for(let t=0;t<2;++t)P.push(new BezierPatch(S(M[t]),i,r,y,T))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(t,e,i,r,n){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],h=new Align(t,n);let l=Tcorners(h.T.bind(h),[-e,-e,0],[e,e,0]);P.push(new BezierPatch(function(t){let i=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];i[a]=h.T([e*r[0],e*r[1],0])}return i}(o),i,r,l[0],l[1]))}function cylinder(t,e,i,r,n,s,o){let h,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],[1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Align(t,s);function m(t){let e=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];e[a]=d.T([h*r[0],l*r[1],i*r[2]])}return e}let f=Tcorners(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){h=t*e;for(let t=-1;t<=1;t+=2)l=t*e,P.push(new BezierPatch(m(c),r,n,u,p))}if(o){let e=d.T([0,0,i]);P.push(new BezierCurve([t,e],r,n,t,e))}}function rmf(t,e,i,a,r){class n{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=cross(i,e)}}let s=Number.EPSILON*Math.max(abs2(t),abs2(e),abs2(i),abs2(a));function o(r){if(1==r){let r=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return abs2(r)>s?unit(r):(r=[2*i[0]-e[0]-a[0],2*i[1]-e[1]-a[1],2*i[2]-e[2]-a[2]],abs2(r)>s?unit(r):[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])])}let n=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[n[0]*l+o[0]*r+h[0],n[1]*l+o[1]*r+h[1],n[2]*l+o[2]*r+h[2]];return abs2(c)>s?unit(c):(l=2*r,c=[n[0]*l+o[0],n[1]*l+o[1],n[2]*l+o[2]],abs2(c)>s?unit(c):unit(n))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];abs2(l)<s&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],abs2(l)<s&&(l=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])])),l=unit(l);let c=function(t){let e=cross(t,[0,1,0]),i=Number.EPSILON*abs2(t);return abs2(e)>i?unit(e):(e=cross(t,[0,0,1]),abs2(e)>i?unit(e):[1,0,0])}(l);h[0]=new n(t,c,l);for(let s=1;s<r.length;++s){let l=h[s-1],c=r[s],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*a[0],f*t[1]+m*e[1]+d*i[1]+p*a[1],f*t[2]+m*e[2]+d*i[2]+p*a[2]],g=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=g[0]||0!=g[1]||0!=g[2]){let t=l.r,e=unit(g),i=l.t,a=dot(e,i),r=[i[0]-2*a*e[0],i[1]-2*a*e[1],i[2]-2*a*e[2]];i=o(c);let d=2*dot(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=unit([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[s]=new n(v,unit(m),unit(i))}else h[s]=h[s-1]}return h}function tube(t,e,i,r,n,s,o){let h=rmf(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),l=a*e,c=[[e,0],[e,l],[l,e],[0,e]];function d(e,a,o,l){let d=Array(16);for(let i=0;i<4;++i){let r=h[i],n=r.r[0],s=r.s[0],m=n*e+s*a,f=n*o+s*l;n=r.r[1],s=r.s[1];let u=n*e+s*a,p=n*o+s*l;n=r.r[2],s=r.s[2];let v=n*e+s*a,g=n*o+s*l,x=t[i],w=x[0];w1=x[1],w2=x[2];for(let t=0;t<4;++t){let e=c[t],a=e[0],r=e[1];d[4*i+t]=[m*a+f*r+w,u*a+p*r+w1,v*a+g*r+w2]}}P.push(new BezierPatch(d,i,r,n,s))}d(1,0,0,1),d(0,-1,1,0),d(-1,0,0,-1),d(0,1,-1,0),o&&P.push(new BezierCurve(t,i,r,n,s))}function webGLStart(){canvas=document.getElementById("Asymptote"),embedded=window.top.document!=document,initGL(),gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1),canvasWidth0=canvasWidth,canvasHeight0=canvasHeight,mat4.identity(rotMat),0!=window.innerWidth&&0!=window.innerHeight&&resize(),window.addEventListener("resize",resize,!1)}
##############################################
asymptote-2.67/asymptote.spec:1:%{!?_texmf: %global _texmf %(eval "echo `kpsewhich -expand-var '$TEXMFLOCAL'`")}
asymptote-2.67/asymptote.spec-2-%global _python_bytecompile_errors_terminate_build 0
##############################################
asymptote-2.67/asymptote.spec-45-%build
asymptote-2.67/asymptote.spec:46:CFLAGS="`echo $RPM_OPT_FLAGS | sed s/-O2/-O3/`" \
asymptote-2.67/asymptote.spec-47-%configure --with-latex=%{_texmf}/tex/latex --with-context=%{_texmf}/tex/context/third
##############################################
asymptote-2.67/prc/PRC.h-36-#define PRC_TYPE_RI				( PRC_TYPE_ROOT + 230 )	// Types for PRC representation items
asymptote-2.67/prc/PRC.h:37:#define PRC_TYPE_ASM				( PRC_TYPE_ROOT + 300 )	// Types for PRC assembly
asymptote-2.67/prc/PRC.h-38-#define PRC_TYPE_MKP				( PRC_TYPE_ROOT + 500 )	// Types for PRC markup
##############################################
asymptote-2.67/prc/PRC.h-122-
asymptote-2.67/prc/PRC.h:123:#define PRC_TYPE_ASM_ModelFile			( PRC_TYPE_ASM + 1 )	// Basic entry type for PRC. 
asymptote-2.67/prc/PRC.h:124:#define PRC_TYPE_ASM_FileStructure		( PRC_TYPE_ASM + 2 )	// Basic structure for PRC files. 
asymptote-2.67/prc/PRC.h:125:#define PRC_TYPE_ASM_FileStructureGlobals	( PRC_TYPE_ASM + 3 )	// Basic structure for PRC files : globals. 
asymptote-2.67/prc/PRC.h:126:#define PRC_TYPE_ASM_FileStructureTree		( PRC_TYPE_ASM + 4 )	// Basic structure for PRC files : tree. 
asymptote-2.67/prc/PRC.h:127:#define PRC_TYPE_ASM_FileStructureTessellation	( PRC_TYPE_ASM + 5 )	// Basic structure for PRC files : tessellation. 
asymptote-2.67/prc/PRC.h:128:#define PRC_TYPE_ASM_FileStructureGeometry	( PRC_TYPE_ASM + 6 )	// Basic structure for PRC files : geometry. 
asymptote-2.67/prc/PRC.h:129:#define PRC_TYPE_ASM_FileStructureExtraGeometry	( PRC_TYPE_ASM + 7 )	// Basic structure for PRC files : extra geometry data.
asymptote-2.67/prc/PRC.h:130:#define PRC_TYPE_ASM_ProductOccurence		( PRC_TYPE_ASM + 10 )	// Basic contruct for assemblies. 
asymptote-2.67/prc/PRC.h:131:#define PRC_TYPE_ASM_PartDefinition		( PRC_TYPE_ASM + 11 )	// Basic construct for parts. 
asymptote-2.67/prc/PRC.h:132:#define PRC_TYPE_ASM_Filter			( PRC_TYPE_ASM + 20 )
asymptote-2.67/prc/PRC.h-133-
##############################################
asymptote-2.67/config.guess-34-
asymptote-2.67/config.guess:35:me=`echo "$0" | sed -e 's,.*/,,'`
asymptote-2.67/config.guess-36-
##############################################
asymptote-2.67/config.guess-102-: ${TMPDIR=/tmp} ;
asymptote-2.67/config.guess:103: { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
asymptote-2.67/config.guess-104- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
##############################################
asymptote-2.67/config.guess-151-	EOF
asymptote-2.67/config.guess:152:	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
asymptote-2.67/config.guess-153-
##############################################
asymptote-2.67/config.guess-188-	    earmv*)
asymptote-2.67/config.guess:189:		arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
asymptote-2.67/config.guess:190:		endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
asymptote-2.67/config.guess-191-		machine="${arch}${endian}"-unknown
##############################################
asymptote-2.67/config.guess-220-		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
asymptote-2.67/config.guess:221:		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
asymptote-2.67/config.guess-222-		;;
##############################################
asymptote-2.67/config.guess-233-	    *)
asymptote-2.67/config.guess:234:		release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
asymptote-2.67/config.guess-235-		;;
##############################################
asymptote-2.67/config.guess-280-	*4.0)
asymptote-2.67/config.guess:281:		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
asymptote-2.67/config.guess-282-		;;
asymptote-2.67/config.guess-283-	*5.*)
asymptote-2.67/config.guess:284:		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
asymptote-2.67/config.guess-285-		;;
##############################################
asymptote-2.67/config.guess-290-	# types through head -n 1, so we only detect the type of CPU 0.
asymptote-2.67/config.guess:291:	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
asymptote-2.67/config.guess-292-	case "$ALPHA_CPU_TYPE" in
##############################################
asymptote-2.67/config.guess-328-	# 1.2 uses "1.2" for uname -r.
asymptote-2.67/config.guess:329:	echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
asymptote-2.67/config.guess-330-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
##############################################
asymptote-2.67/config.guess-379-    s390x:SunOS:*:*)
asymptote-2.67/config.guess:380:	echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
asymptote-2.67/config.guess-381-	exit ;;
asymptote-2.67/config.guess-382-    sun4H:SunOS:5.*:*)
asymptote-2.67/config.guess:383:	echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
asymptote-2.67/config.guess-384-	exit ;;
asymptote-2.67/config.guess-385-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
asymptote-2.67/config.guess:386:	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
asymptote-2.67/config.guess-387-	exit ;;
##############################################
asymptote-2.67/config.guess-404-	fi
asymptote-2.67/config.guess:405:	echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
asymptote-2.67/config.guess-406-	exit ;;
##############################################
asymptote-2.67/config.guess-410-	# it's likely to be more like Solaris than SunOS4.
asymptote-2.67/config.guess:411:	echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
asymptote-2.67/config.guess-412-	exit ;;
##############################################
asymptote-2.67/config.guess-419-	# Japanese Language versions have a version number like `4.1.3-JL'.
asymptote-2.67/config.guess:420:	echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
asymptote-2.67/config.guess-421-	exit ;;
##############################################
asymptote-2.67/config.guess-425-    sun*:*:4.2BSD:*)
asymptote-2.67/config.guess:426:	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
asymptote-2.67/config.guess-427-	test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
##############################################
asymptote-2.67/config.guess-507-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
asymptote-2.67/config.guess:508:	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
asymptote-2.67/config.guess:509:	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
asymptote-2.67/config.guess-510-	    { echo "$SYSTEM_NAME"; exit; }
##############################################
asymptote-2.67/config.guess-563-    *:IRIX*:*:*)
asymptote-2.67/config.guess:564:	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
asymptote-2.67/config.guess-565-	exit ;;
##############################################
asymptote-2.67/config.guess-593-EOF
asymptote-2.67/config.guess:594:		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
asymptote-2.67/config.guess-595-		then
##############################################
asymptote-2.67/config.guess-606-    *:AIX:*:[4567])
asymptote-2.67/config.guess:607:	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
asymptote-2.67/config.guess-608-	if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
##############################################
asymptote-2.67/config.guess-642-    9000/[34678]??:HP-UX:*:*)
asymptote-2.67/config.guess:643:	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
asymptote-2.67/config.guess-644-	case "$UNAME_MACHINE" in
##############################################
asymptote-2.67/config.guess-696-EOF
asymptote-2.67/config.guess:697:		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
asymptote-2.67/config.guess-698-		    test -z "$HP_ARCH" && HP_ARCH=hppa
##############################################
asymptote-2.67/config.guess-724-    ia64:HP-UX:*:*)
asymptote-2.67/config.guess:725:	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
asymptote-2.67/config.guess-726-	echo ia64-hp-hpux"$HPUX_REV"
##############################################
asymptote-2.67/config.guess-754-EOF
asymptote-2.67/config.guess:755:	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
asymptote-2.67/config.guess-756-		{ echo "$SYSTEM_NAME"; exit; }
##############################################
asymptote-2.67/config.guess-825-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
asymptote-2.67/config.guess:826:	FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
asymptote-2.67/config.guess-827-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
##############################################
asymptote-2.67/config.guess-830-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
asymptote-2.67/config.guess:831:	FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
asymptote-2.67/config.guess-832-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
##############################################
asymptote-2.67/config.guess-850-	esac
asymptote-2.67/config.guess:851:	echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
asymptote-2.67/config.guess-852-	exit ;;
##############################################
asymptote-2.67/config.guess-886-    prep*:SunOS:5.*:*)
asymptote-2.67/config.guess:887:	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
asymptote-2.67/config.guess-888-	exit ;;
##############################################
asymptote-2.67/config.guess-890-	# the GNU system
asymptote-2.67/config.guess:891:	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
asymptote-2.67/config.guess-892-	exit ;;
##############################################
asymptote-2.67/config.guess-894-	# other systems with GNU libc and userland
asymptote-2.67/config.guess:895:	echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
asymptote-2.67/config.guess-896-	exit ;;
##############################################
asymptote-2.67/config.guess-988-EOF
asymptote-2.67/config.guess:989:	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
asymptote-2.67/config.guess-990-	test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
##############################################
asymptote-2.67/config.guess-1088-    i*86:*:4.*:*)
asymptote-2.67/config.guess:1089:	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
asymptote-2.67/config.guess-1090-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
##############################################
asymptote-2.67/config.guess-1291-	fi
asymptote-2.67/config.guess:1292:	if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
asymptote-2.67/config.guess-1293-	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
##############################################
asymptote-2.67/config.guess-1389-    *:DragonFly:*:*)
asymptote-2.67/config.guess:1390:	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
asymptote-2.67/config.guess-1391-	exit ;;
##############################################
asymptote-2.67/config.guess-1402-    i*86:skyos:*:*)
asymptote-2.67/config.guess:1403:	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
asymptote-2.67/config.guess-1404-	exit ;;
##############################################
asymptote-2.67/config.guess-1572-
asymptote-2.67/config.guess:1573:$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
asymptote-2.67/config.guess-1574-	{ echo "$SYSTEM_NAME"; exit; }
##############################################
asymptote-2.67/config.sub-52-
asymptote-2.67/config.sub:53:me=`echo "$0" | sed -e 's,.*/,,'`
asymptote-2.67/config.sub-54-
##############################################
asymptote-2.67/config.sub-768-	i*86v32)
asymptote-2.67/config.sub:769:		cpu=`echo "$1" | sed -e 's/86.*/86/'`
asymptote-2.67/config.sub-770-		vendor=pc
##############################################
asymptote-2.67/config.sub-773-	i*86v4*)
asymptote-2.67/config.sub:774:		cpu=`echo "$1" | sed -e 's/86.*/86/'`
asymptote-2.67/config.sub-775-		vendor=pc
##############################################
asymptote-2.67/config.sub-778-	i*86v)
asymptote-2.67/config.sub:779:		cpu=`echo "$1" | sed -e 's/86.*/86/'`
asymptote-2.67/config.sub-780-		vendor=pc
##############################################
asymptote-2.67/config.sub-783-	i*86sol2)
asymptote-2.67/config.sub:784:		cpu=`echo "$1" | sed -e 's/86.*/86/'`
asymptote-2.67/config.sub-785-		vendor=pc
##############################################
asymptote-2.67/config.sub-916-		cpu=sparc
asymptote-2.67/config.sub:917:		vendor=`echo "$basic_machine" | sed 's/-.*//'`
asymptote-2.67/config.sub-918-		;;
##############################################
asymptote-2.67/config.sub-1083-	sh5e[lb]-*)
asymptote-2.67/config.sub:1084:		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
asymptote-2.67/config.sub-1085-		;;
##############################################
asymptote-2.67/config.sub-1101-	xscale-* | xscalee[bl]-*)
asymptote-2.67/config.sub:1102:		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
asymptote-2.67/config.sub-1103-		;;
##############################################
asymptote-2.67/config.sub-1256-			*)
asymptote-2.67/config.sub:1257:				echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
asymptote-2.67/config.sub-1258-				exit 1
##############################################
asymptote-2.67/config.sub-1290-	solaris1 | solaris1.*)
asymptote-2.67/config.sub:1291:		os=`echo $os | sed -e 's|solaris1|sunos4|'`
asymptote-2.67/config.sub-1292-		;;
##############################################
asymptote-2.67/config.sub-1299-	gnu/linux*)
asymptote-2.67/config.sub:1300:		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
asymptote-2.67/config.sub-1301-		;;
##############################################
asymptote-2.67/config.sub-1322-	sco3.2.[4-9]*)
asymptote-2.67/config.sub:1323:		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
asymptote-2.67/config.sub-1324-		;;
##############################################
asymptote-2.67/config.sub-1386-	nto*)
asymptote-2.67/config.sub:1387:		os=`echo $os | sed -e 's|nto|nto-qnx|'`
asymptote-2.67/config.sub-1388-		;;
##############################################
asymptote-2.67/config.sub-1396-	linux*)
asymptote-2.67/config.sub:1397:		os=`echo $os | sed -e 's|linux|linux-gnu|'`
asymptote-2.67/config.sub-1398-		;;
##############################################
asymptote-2.67/config.sub-1408-	mac*)
asymptote-2.67/config.sub:1409:		os=`echo "$os" | sed -e 's|mac|macos|'`
asymptote-2.67/config.sub-1410-		;;
##############################################
asymptote-2.67/config.sub-1417-	sunos5*)
asymptote-2.67/config.sub:1418:		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
asymptote-2.67/config.sub-1419-		;;
asymptote-2.67/config.sub-1420-	sunos6*)
asymptote-2.67/config.sub:1421:		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
asymptote-2.67/config.sub-1422-		;;
##############################################
asymptote-2.67/config.sub-1454-	sinix5.*)
asymptote-2.67/config.sub:1455:		os=`echo $os | sed -e 's|sinix|sysv|'`
asymptote-2.67/config.sub-1456-		;;
##############################################
asymptote-2.67/config.sub-1514-	*)
asymptote-2.67/config.sub:1515:		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
asymptote-2.67/config.sub-1516-		exit 1
##############################################
asymptote-2.67/patches/dvipdf-33-if [ $# -lt 1 -o $# -gt 2 ]; then
asymptote-2.67/patches/dvipdf:34:	echo "Usage: `basename $0` [options...] input.dvi [output.pdf]" 1>&2
asymptote-2.67/patches/dvipdf-35-	exit 1
##############################################
asymptote-2.67/patches/dvipdf-42-	case "${infile}" in
asymptote-2.67/patches/dvipdf:43:	  *.dvi)	base=`basename "${infile}" .dvi` ;;
asymptote-2.67/patches/dvipdf:44:	  *)		base=`basename "${infile}"` ;;
asymptote-2.67/patches/dvipdf-45-	esac
##############################################
asymptote-2.67/configure-45-if test -z "$BASH_VERSION$ZSH_VERSION" \
asymptote-2.67/configure:46:    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
asymptote-2.67/configure-47-  as_echo='print -r --'
asymptote-2.67/configure-48-  as_echo_n='print -rn --'
asymptote-2.67/configure:49:elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
asymptote-2.67/configure-50-  as_echo='printf %s\n'
##############################################
asymptote-2.67/configure-52-else
asymptote-2.67/configure:53:  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
asymptote-2.67/configure-54-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
##############################################
asymptote-2.67/configure-62-	expr "X$arg" : "X\\(.*\\)$as_nl";
asymptote-2.67/configure:63:	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
asymptote-2.67/configure-64-      esac;
##############################################
asymptote-2.67/configure-199-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
asymptote-2.67/configure:200:  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
asymptote-2.67/configure-201-test \$(( 1 + 1 )) = 2 || exit 1"
##############################################
asymptote-2.67/configure-327-      case $as_dir in #(
asymptote-2.67/configure:328:      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
asymptote-2.67/configure-329-      *) as_qdir=$as_dir;;
##############################################
asymptote-2.67/configure-400-  {
asymptote-2.67/configure:401:    as_val=`expr "$@" || test $? -eq 1`
asymptote-2.67/configure-402-  }
##############################################
asymptote-2.67/configure-407-# ----------------------------------------
asymptote-2.67/configure:408:# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
asymptote-2.67/configure-409-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
##############################################
asymptote-2.67/configure-470-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
asymptote-2.67/configure:471:  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
asymptote-2.67/configure-472-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
##############################################
asymptote-2.67/configure-811-  case $ac_option in
asymptote-2.67/configure:812:  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
asymptote-2.67/configure-813-  *=)   ac_optarg= ;;
##############################################
asymptote-2.67/configure-855-  -disable-* | --disable-*)
asymptote-2.67/configure:856:    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
asymptote-2.67/configure-857-    # Reject names that are not valid shell variable names.
##############################################
asymptote-2.67/configure-860-    ac_useropt_orig=$ac_useropt
asymptote-2.67/configure:861:    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
asymptote-2.67/configure-862-    case $ac_user_opts in
##############################################
asymptote-2.67/configure-881-  -enable-* | --enable-*)
asymptote-2.67/configure:882:    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
asymptote-2.67/configure-883-    # Reject names that are not valid shell variable names.
##############################################
asymptote-2.67/configure-886-    ac_useropt_orig=$ac_useropt
asymptote-2.67/configure:887:    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
asymptote-2.67/configure-888-    case $ac_user_opts in
##############################################
asymptote-2.67/configure-1085-  -with-* | --with-*)
asymptote-2.67/configure:1086:    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
asymptote-2.67/configure-1087-    # Reject names that are not valid shell variable names.
##############################################
asymptote-2.67/configure-1090-    ac_useropt_orig=$ac_useropt
asymptote-2.67/configure:1091:    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
asymptote-2.67/configure-1092-    case $ac_user_opts in
##############################################
asymptote-2.67/configure-1101-  -without-* | --without-*)
asymptote-2.67/configure:1102:    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
asymptote-2.67/configure-1103-    # Reject names that are not valid shell variable names.
##############################################
asymptote-2.67/configure-1106-    ac_useropt_orig=$ac_useropt
asymptote-2.67/configure:1107:    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
asymptote-2.67/configure-1108-    case $ac_user_opts in
##############################################
asymptote-2.67/configure-1139-  *=*)
asymptote-2.67/configure:1140:    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
asymptote-2.67/configure-1141-    # Reject names that are not valid shell variable names.
##############################################
asymptote-2.67/configure-1160-if test -n "$ac_prev"; then
asymptote-2.67/configure:1161:  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
asymptote-2.67/configure-1162-  as_fn_error $? "missing argument to $ac_option"
##############################################
asymptote-2.67/configure-1182-    */ )
asymptote-2.67/configure:1183:      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
asymptote-2.67/configure-1184-      eval $ac_var=\$ac_val;;
##############################################
asymptote-2.67/configure-1217-ac_ls_di=`ls -di .` &&
asymptote-2.67/configure:1218:ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
asymptote-2.67/configure-1219-  as_fn_error $? "working directory cannot be determined"
##############################################
asymptote-2.67/configure-1273-case $srcdir in
asymptote-2.67/configure:1274:*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
asymptote-2.67/configure-1275-esac
##############################################
asymptote-2.67/configure-1316-By default, \`make install' will install all the files in
asymptote-2.67/configure:1317:\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
asymptote-2.67/configure:1318:an installation prefix other than \`$ac_default_prefix' using \`--prefix',
asymptote-2.67/configure-1319-for instance \`--prefix=\$HOME'.
##############################################
asymptote-2.67/configure-1423-*)
asymptote-2.67/configure:1424:  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
asymptote-2.67/configure-1425-  # A ".." for each directory in $ac_dir_suffix.
asymptote-2.67/configure:1426:  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
asymptote-2.67/configure-1427-  case $ac_top_builddir_sub in
##############################################
asymptote-2.67/configure-2128-    *\'*)
asymptote-2.67/configure:2129:      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
asymptote-2.67/configure-2130-    esac
##############################################
asymptote-2.67/configure-2211-      case $ac_val in
asymptote-2.67/configure:2212:      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
asymptote-2.67/configure-2213-      esac
##############################################
asymptote-2.67/configure-2226-	case $ac_val in
asymptote-2.67/configure:2227:	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
asymptote-2.67/configure-2228-	esac
##############################################
asymptote-2.67/configure-2346-    set,)
asymptote-2.67/configure:2347:      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
asymptote-2.67/configure:2348:$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
asymptote-2.67/configure-2349-      ac_cache_corrupted=: ;;
##############################################
asymptote-2.67/configure-2357-	# differences in whitespace do not lead to failure.
asymptote-2.67/configure:2358:	ac_old_val_w=`echo x $ac_old_val`
asymptote-2.67/configure:2359:	ac_new_val_w=`echo x $ac_new_val`
asymptote-2.67/configure-2360-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
##############################################
asymptote-2.67/configure-2377-    case $ac_new_val in
asymptote-2.67/configure:2378:    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
asymptote-2.67/configure-2379-    *) ac_arg=$ac_var=$ac_new_val ;;
##############################################
asymptote-2.67/configure-2863-$as_echo_n "checking whether the C compiler works... " >&6; }
asymptote-2.67/configure:2864:ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
asymptote-2.67/configure-2865-
##############################################
asymptote-2.67/configure-2907-	then :; else
asymptote-2.67/configure:2908:	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
asymptote-2.67/configure-2909-	fi
##############################################
asymptote-2.67/configure-2967-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
asymptote-2.67/configure:2968:    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
asymptote-2.67/configure-2969-	  break;;
##############################################
asymptote-2.67/configure-3076-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
asymptote-2.67/configure:3077:    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
asymptote-2.67/configure-3078-       break;;
##############################################
asymptote-2.67/configure-3464-  # Check for GNU $ac_path_GREP
asymptote-2.67/configure:3465:case `"$ac_path_GREP" --version 2>&1` in
asymptote-2.67/configure-3466-*GNU*)
##############################################
asymptote-2.67/configure-3530-  # Check for GNU $ac_path_EGREP
asymptote-2.67/configure:3531:case `"$ac_path_EGREP" --version 2>&1` in
asymptote-2.67/configure-3532-*GNU*)
##############################################
asymptote-2.67/configure-3691-do :
asymptote-2.67/configure:3692:  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
asymptote-2.67/configure-3693-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
##############################################
asymptote-2.67/configure-3696-  cat >>confdefs.h <<_ACEOF
asymptote-2.67/configure:3697:#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
asymptote-2.67/configure-3698-_ACEOF
##############################################
asymptote-2.67/configure-3968-test "x$ac_build_alias" = x &&
asymptote-2.67/configure:3969:  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
asymptote-2.67/configure-3970-test "x$ac_build_alias" = x &&
asymptote-2.67/configure-3971-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
asymptote-2.67/configure:3972:ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
asymptote-2.67/configure-3973-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
##############################################
asymptote-2.67/configure-3992-IFS=$ac_save_IFS
asymptote-2.67/configure:3993:case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
asymptote-2.67/configure-3994-
##############################################
asymptote-2.67/configure-4003-else
asymptote-2.67/configure:4004:  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
asymptote-2.67/configure-4005-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
##############################################
asymptote-2.67/configure-4025-IFS=$ac_save_IFS
asymptote-2.67/configure:4026:case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
asymptote-2.67/configure-4027-
##############################################
asymptote-2.67/configure-4082-if test "x$kpsewhich" = "xtrue"; then
asymptote-2.67/configure:4083:  latexdir=`kpsewhich -expand-var='$TEXMFLOCAL'/tex/latex`
asymptote-2.67/configure-4084-else
asymptote-2.67/configure-4085-  latexdir=$prefix/share/texmf/tex/latex
asymptote-2.67/configure:4086:  as_ac_File=`$as_echo "ac_cv_file_$latexdir/base/latex.ltx" | $as_tr_sh`
asymptote-2.67/configure-4087-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $latexdir/base/latex.ltx" >&5
##############################################
asymptote-2.67/configure-4106-  latexdir=/usr/share/texmf/tex/latex
asymptote-2.67/configure:4107:  as_ac_File=`$as_echo "ac_cv_file_$latexdir/base/latex.ltx" | $as_tr_sh`
asymptote-2.67/configure-4108-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $latexdir/base/latex.ltx" >&5
##############################################
asymptote-2.67/configure-4181-if test "x$kpsewhich" = "xtrue"; then
asymptote-2.67/configure:4182:  contextdir=`kpsewhich -expand-var='$TEXMFLOCAL'/tex/context/third`
asymptote-2.67/configure-4183-else
##############################################
asymptote-2.67/configure-4655-/* end confdefs.h.  */
asymptote-2.67/configure:4656:`cat $LEX_OUTPUT_ROOT.c`
asymptote-2.67/configure-4657-_ACEOF
##############################################
asymptote-2.67/configure-4688-  #define YYTEXT_POINTER 1
asymptote-2.67/configure:4689:`cat $LEX_OUTPUT_ROOT.c`
asymptote-2.67/configure-4690-_ACEOF
##############################################
asymptote-2.67/configure-5600-set x ${MAKE-make}
asymptote-2.67/configure:5601:ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
asymptote-2.67/configure-5602-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
##############################################
asymptote-2.67/configure-5610-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
asymptote-2.67/configure:5611:case `${MAKE-make} -f conftest.make 2>/dev/null` in
asymptote-2.67/configure-5612-  *@@@%%%=?*=@@@%%%*)
##############################################
asymptote-2.67/configure-5673-if test "$GXX" = yes ; then
asymptote-2.67/configure:5674:   ac_gcc_version=`echo __GNUC__ | $CC -E - | grep -v ^\#`
asymptote-2.67/configure:5675:   ac_clang=`echo __clang__ | $CC -E - | grep -v ^\#`
asymptote-2.67/configure-5676-   if test "$ac_gcc_version" -lt 4; then
##############################################
asymptote-2.67/configure-5875-
asymptote-2.67/configure:5876:as_ac_File=`$as_echo "ac_cv_file_$GCFILE.tar.gz" | $as_tr_sh`
asymptote-2.67/configure-5877-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $GCFILE.tar.gz" >&5
##############################################
asymptote-2.67/configure-7164-do :
asymptote-2.67/configure:7165:  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
asymptote-2.67/configure-7166-ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
##############################################
asymptote-2.67/configure-7168-  cat >>confdefs.h <<_ACEOF
asymptote-2.67/configure:7169:#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
asymptote-2.67/configure-7170-_ACEOF
##############################################
asymptote-2.67/configure-7543-do :
asymptote-2.67/configure:7544:  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
asymptote-2.67/configure-7545-ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
##############################################
asymptote-2.67/configure-7547-  cat >>confdefs.h <<_ACEOF
asymptote-2.67/configure:7548:#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
asymptote-2.67/configure-7549-_ACEOF
##############################################
asymptote-2.67/configure-7751-do :
asymptote-2.67/configure:7752:  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
asymptote-2.67/configure-7753-ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
##############################################
asymptote-2.67/configure-7755-  cat >>confdefs.h <<_ACEOF
asymptote-2.67/configure:7756:#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
asymptote-2.67/configure-7757-_ACEOF
##############################################
asymptote-2.67/configure-8422-do :
asymptote-2.67/configure:8423:  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
asymptote-2.67/configure-8424-ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
##############################################
asymptote-2.67/configure-8426-  cat >>confdefs.h <<_ACEOF
asymptote-2.67/configure:8427:#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
asymptote-2.67/configure-8428-_ACEOF
##############################################
asymptote-2.67/configure-8623-do :
asymptote-2.67/configure:8624:  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
asymptote-2.67/configure-8625-ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
##############################################
asymptote-2.67/configure-8627-  cat >>confdefs.h <<_ACEOF
asymptote-2.67/configure:8628:#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
asymptote-2.67/configure-8629-_ACEOF
##############################################
asymptote-2.67/configure-8908-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
asymptote-2.67/configure:8909:  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
asymptote-2.67/configure-8910-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
##############################################
asymptote-2.67/configure-8976-if test -z "$BASH_VERSION$ZSH_VERSION" \
asymptote-2.67/configure:8977:    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
asymptote-2.67/configure-8978-  as_echo='print -r --'
asymptote-2.67/configure-8979-  as_echo_n='print -rn --'
asymptote-2.67/configure:8980:elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
asymptote-2.67/configure-8981-  as_echo='printf %s\n'
##############################################
asymptote-2.67/configure-8983-else
asymptote-2.67/configure:8984:  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
asymptote-2.67/configure-8985-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
##############################################
asymptote-2.67/configure-8993-	expr "X$arg" : "X\\(.*\\)$as_nl";
asymptote-2.67/configure:8994:	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
asymptote-2.67/configure-8995-      esac;
##############################################
asymptote-2.67/configure-9070-# ----------------------------------------
asymptote-2.67/configure:9071:# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
asymptote-2.67/configure-9072-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
##############################################
asymptote-2.67/configure-9142-  {
asymptote-2.67/configure:9143:    as_val=`expr "$@" || test $? -eq 1`
asymptote-2.67/configure-9144-  }
##############################################
asymptote-2.67/configure-9246-      case $as_dir in #(
asymptote-2.67/configure:9247:      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
asymptote-2.67/configure-9248-      *) as_qdir=$as_dir;;
##############################################
asymptote-2.67/configure-9377-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
asymptote-2.67/configure:9378:ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
asymptote-2.67/configure-9379-ac_cs_version="\\
##############################################
asymptote-2.67/configure-9400-  --*=?*)
asymptote-2.67/configure:9401:    ac_option=`expr "X$1" : 'X\([^=]*\)='`
asymptote-2.67/configure:9402:    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
asymptote-2.67/configure-9403-    ac_shift=:
##############################################
asymptote-2.67/configure-9405-  --*=)
asymptote-2.67/configure:9406:    ac_option=`expr "X$1" : 'X\([^=]*\)='`
asymptote-2.67/configure-9407-    ac_optarg=
##############################################
asymptote-2.67/configure-9429-    case $ac_optarg in
asymptote-2.67/configure:9430:    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
asymptote-2.67/configure-9431-    '') as_fn_error $? "missing file argument" ;;
##############################################
asymptote-2.67/configure-9437-    case $ac_optarg in
asymptote-2.67/configure:9438:    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
asymptote-2.67/configure-9439-    esac
##############################################
asymptote-2.67/configure-9560-fi
asymptote-2.67/configure:9561:ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
asymptote-2.67/configure-9562-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
##############################################
asymptote-2.67/configure-9577-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
asymptote-2.67/configure:9578:ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
asymptote-2.67/configure-9579-ac_delim='%!_!# '
##############################################
asymptote-2.67/configure-9583-
asymptote-2.67/configure:9584:  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
asymptote-2.67/configure-9585-  if test $ac_delim_n = $ac_delim_num; then
##############################################
asymptote-2.67/configure-9721-for ac_last_try in false false :; do
asymptote-2.67/configure:9722:  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
asymptote-2.67/configure-9723-  if test -z "$ac_tt"; then
##############################################
asymptote-2.67/configure-9853-      esac
asymptote-2.67/configure:9854:      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
asymptote-2.67/configure-9855-      as_fn_append ac_file_inputs " '$ac_f'"
##############################################
asymptote-2.67/configure-9912-*)
asymptote-2.67/configure:9913:  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
asymptote-2.67/configure-9914-  # A ".." for each directory in $ac_dir_suffix.
asymptote-2.67/configure:9915:  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
asymptote-2.67/configure-9916-  case $ac_top_builddir_sub in
##############################################
asymptote-2.67/configure-9968-/@mandir@/p'
asymptote-2.67/configure:9969:case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
asymptote-2.67/configure-9970-*datarootdir*) ac_datarootdir_seen=yes;;
##############################################
asymptote-2.67/configure-9985-
asymptote-2.67/configure:9986:# Neutralize VPATH when `$srcdir' = `.'.
asymptote-2.67/configure-9987-# Shell code in configure.ac might set extrasub.
##############################################
asymptote-2.67/configure-10012-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
asymptote-2.67/configure:10013:  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
asymptote-2.67/configure-10014-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
##############################################
asymptote-2.67/configure-10093-if test "x$GCDIR" != "x" ; then
asymptote-2.67/configure:10094:   as_ac_File=`$as_echo "ac_cv_file_$GCDIR.tar.gz" | $as_tr_sh`
asymptote-2.67/configure-10095-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $GCDIR.tar.gz" >&5
##############################################
asymptote-2.67/debian/patches/honour-source-date-epoch-52-                 $cmd= $`.$1;
asymptote-2.67/debian/patches/honour-source-date-epoch:53:-                $it= `$cmd`; chop $it;
asymptote-2.67/debian/patches/honour-source-date-epoch-54-+                if($cmd =~ /date [\"\']\+(.*?)[\"\']/) {
##############################################
asymptote-2.67/debian/patches/honour-source-date-epoch-57-+                } else {
asymptote-2.67/debian/patches/honour-source-date-epoch:58:+                  $it= `$cmd`; chop $it;
asymptote-2.67/debian/patches/honour-source-date-epoch-59-+                }
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/m-html.pl-29-    $html_prefix =~ s:^\.//:/:;
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/m-html.pl:30:    system('rm','-r',"$html_prefix.html");
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/m-html.pl:31:    system('mkdir',"$html_prefix.html");
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/m-html.pl-32-    open(HTML,">$html_prefix.html/index.html");
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-63-
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:64:for $x (@outputs) { require("./m-$x.pl"); }
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-65-
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-137-                $cmd= $`.$1;
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:138:                $it= `$cmd`; chop $it;
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-139-                print $fh $it;
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-173-        $svalue= $'; $svari= $1;
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:174:        eval("\$user_$svari=\$svalue"); $@ && warn "setting $svalue failed: $@\n";
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-175-    } elsif (m/^\\verbatim$/) {
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-260-    for $coutput (@outputs) {
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:261:        if ($fnbase eq 'text' && eval("\@${coutput}_cmds")) {
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-262-#print STDERR "special handling text (@callargs) for $coutput\n";
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-263-            $evstrg= "\$${coutput}_args[\$#${coutput}_args].=\"\@callargs\"";
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:264:            eval($evstrg);
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-265-            length($@) && warn "call adding for $coutput (($evstrg)): $@";
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-283-    $cmd= $_[0];
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:284:    eval("push(\@${coutput}_cmds,\$cmd); push(\@${coutput}_args,'')");
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-285-    length($@) && warn "arg setting up for $coutput: $@";
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-291-             "\$${coutput}_arg= \$arg= pop(\@${coutput}_args); ";
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:292:    eval($evstrg);
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-293-    length($@) && warn "endarg extracting for $coutput (($evstrg)): $@";
##############################################
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-295-    $evstrg= "&${coutput}_do_${cmd}(\$arg)";
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl:296:    eval($evstrg);
asymptote-2.67/.pc/honour-source-date-epoch/doc/FAQ/bfnnconv.pl-297-    length($@) && warn "endarg running ${coutput}_do_${cmd} (($evstrg)): $@";
##############################################
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac-32-if test "x$kpsewhich" = "xtrue"; then
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac:33:  latexdir=`kpsewhich -expand-var='$TEXMFLOCAL'/tex/latex`
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac-34-else
##############################################
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac-50-if test "x$kpsewhich" = "xtrue"; then
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac:51:  contextdir=`kpsewhich -expand-var='$TEXMFLOCAL'/tex/context/third`
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac-52-else
##############################################
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac-109-if test "$GXX" = yes ; then
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac:110:   ac_gcc_version=`echo __GNUC__ | $CC -E - | grep -v ^\#`
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac:111:   ac_clang=`echo __clang__ | $CC -E - | grep -v ^\#`
asymptote-2.67/.pc/dyn_link_GLEW.patch/configure.ac-112-   if test "$ac_gcc_version" -lt 4; then
##############################################
asymptote-2.67/configure.ac-32-if test "x$kpsewhich" = "xtrue"; then
asymptote-2.67/configure.ac:33:  latexdir=`kpsewhich -expand-var='$TEXMFLOCAL'/tex/latex`
asymptote-2.67/configure.ac-34-else
##############################################
asymptote-2.67/configure.ac-50-if test "x$kpsewhich" = "xtrue"; then
asymptote-2.67/configure.ac:51:  contextdir=`kpsewhich -expand-var='$TEXMFLOCAL'/tex/context/third`
asymptote-2.67/configure.ac-52-else
##############################################
asymptote-2.67/configure.ac-109-if test "$GXX" = yes ; then
asymptote-2.67/configure.ac:110:   ac_gcc_version=`echo __GNUC__ | $CC -E - | grep -v ^\#`
asymptote-2.67/configure.ac:111:   ac_clang=`echo __clang__ | $CC -E - | grep -v ^\#`
asymptote-2.67/configure.ac-112-   if test "$ac_gcc_version" -lt 4; then