texlive[47274] Build/source/utils: asy 2.42 sources

commits+karl at tug.org commits+karl at tug.org
Wed Apr 4 00:35:05 CEST 2018


Revision: 47274
          http://tug.org/svn/texlive?view=revision&revision=47274
Author:   karl
Date:     2018-04-04 00:35:04 +0200 (Wed, 04 Apr 2018)
Log Message:
-----------
asy 2.42 sources

Modified Paths:
--------------
    trunk/Build/source/utils/README
    trunk/Build/source/utils/asymptote/ChangeLog
    trunk/Build/source/utils/asymptote/Makefile.in
    trunk/Build/source/utils/asymptote/ReleaseNotes
    trunk/Build/source/utils/asymptote/asy-keywords.el
    trunk/Build/source/utils/asymptote/asy.list
    trunk/Build/source/utils/asymptote/asymptote.nsi
    trunk/Build/source/utils/asymptote/asymptote.spec
    trunk/Build/source/utils/asymptote/base/geometry.asy
    trunk/Build/source/utils/asymptote/base/ode.asy
    trunk/Build/source/utils/asymptote/base/plain_Label.asy
    trunk/Build/source/utils/asymptote/base/plain_strings.asy
    trunk/Build/source/utils/asymptote/base/slide.asy
    trunk/Build/source/utils/asymptote/bezierpatch.cc
    trunk/Build/source/utils/asymptote/bezierpatch.h
    trunk/Build/source/utils/asymptote/camp.l
    trunk/Build/source/utils/asymptote/config.guess
    trunk/Build/source/utils/asymptote/config.h.in
    trunk/Build/source/utils/asymptote/config.sub
    trunk/Build/source/utils/asymptote/configure
    trunk/Build/source/utils/asymptote/configure.ac
    trunk/Build/source/utils/asymptote/doc/CAD.pdf
    trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
    trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl
    trunk/Build/source/utils/asymptote/doc/FAQ/install-sh
    trunk/Build/source/utils/asymptote/doc/Makefile.in
    trunk/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
    trunk/Build/source/utils/asymptote/doc/asy-latex.pdf
    trunk/Build/source/utils/asymptote/doc/asyRefCard.pdf
    trunk/Build/source/utils/asymptote/doc/asymptote.pdf
    trunk/Build/source/utils/asymptote/doc/asymptote.texi
    trunk/Build/source/utils/asymptote/doc/install-sh
    trunk/Build/source/utils/asymptote/doc/png/asymptote.info
    trunk/Build/source/utils/asymptote/drawelement.h
    trunk/Build/source/utils/asymptote/drawsurface.cc
    trunk/Build/source/utils/asymptote/examples/venn.asy
    trunk/Build/source/utils/asymptote/exp.cc
    trunk/Build/source/utils/asymptote/fileio.cc
    trunk/Build/source/utils/asymptote/fpu.h
    trunk/Build/source/utils/asymptote/glrender.cc
    trunk/Build/source/utils/asymptote/install-sh
    trunk/Build/source/utils/asymptote/lex.yy.cc
    trunk/Build/source/utils/asymptote/main.cc
    trunk/Build/source/utils/asymptote/mathop.h
    trunk/Build/source/utils/asymptote/patches/README
    trunk/Build/source/utils/asymptote/predicates.cc
    trunk/Build/source/utils/asymptote/predicates.h
    trunk/Build/source/utils/asymptote/revision.cc
    trunk/Build/source/utils/asymptote/runarray.cc
    trunk/Build/source/utils/asymptote/runarray.in
    trunk/Build/source/utils/asymptote/runlabel.cc
    trunk/Build/source/utils/asymptote/runlabel.in
    trunk/Build/source/utils/asymptote/runmath.cc
    trunk/Build/source/utils/asymptote/runmath.in
    trunk/Build/source/utils/asymptote/runstring.cc
    trunk/Build/source/utils/asymptote/runstring.in
    trunk/Build/source/utils/asymptote/util.cc
    trunk/Build/source/utils/asymptote/util.h
    trunk/Build/source/utils/asymptote/xstream.h

Added Paths:
-----------
    trunk/Build/source/utils/asymptote/base/rational.asy
    trunk/Build/source/utils/asymptote/build-scripts/
    trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows
    trunk/Build/source/utils/asymptote/build-scripts/README-binaries
    trunk/Build/source/utils/asymptote/build-scripts/build-asymptote
    trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos
    trunk/Build/source/utils/asymptote/build-scripts/build-freeglut
    trunk/Build/source/utils/asymptote/examples/linearregression.asy
    trunk/Build/source/utils/asymptote/gc-7.6.2.tar.gz
    trunk/Build/source/utils/asymptote/libatomic_ops-7.6.2.tar.gz
    trunk/Build/source/utils/asymptote/patches/cygwin_freeglut-2.8.1.patch
    trunk/Build/source/utils/asymptote/patches/cygwin_gc.patch

Removed Paths:
-------------
    trunk/Build/source/utils/asymptote/gc-7.6.0.tar.gz
    trunk/Build/source/utils/asymptote/libatomic_ops-7.4.4.tar.gz

Modified: trunk/Build/source/utils/README
===================================================================
--- trunk/Build/source/utils/README	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/README	2018-04-03 22:35:04 UTC (rev 47274)
@@ -5,7 +5,7 @@
 See comments in ../texk/README.
 
 
-asymptote 2.41 - checked 23mar17
+asymptote 2.42 - checked 4apr18
   update to TL from CTAN, to include prebuilt doc.
   see http://tug.org/texlive/build.html#asymptote
   and tlpkg/bin/tl-update-asy

Modified: trunk/Build/source/utils/asymptote/ChangeLog
===================================================================
--- trunk/Build/source/utils/asymptote/ChangeLog	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/ChangeLog	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,3 +1,360 @@
+commit 4d0f6ba1b9c6ea2609b145f42ec9a39023e60706
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Apr 3 00:12:12 2018 -0600
+
+    Revert to centroid depth sorting of transparent triangles until splitting code is complete.
+
+commit 355b585791bba490a8c0847dc104ef3504180353
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 23:44:04 2018 -0600
+
+    Revert to nativeformat EPS for MSWindows.
+
+commit ab9623e7777ff1e85f72f326b6ad9771f84290af
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 23:37:05 2018 -0600
+
+    Fix ode integrator output.
+
+commit 440a4e23f492556b6671ad713c92507c4da91d94
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 23:31:44 2018 -0600
+
+    Add implementation of rational arithmetic.
+
+commit fb83e1d71bad988d081d308dc9a9d1f385871bdc
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 23:20:23 2018 -0600
+
+    Improve missing texi2vi workaround.
+
+commit f10affaa88f9680576f541ff351a3996e502a135
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 22:49:03 2018 -0600
+
+    Specify current directory.
+
+commit d8d976aee0234524ab5794a75d61f9ea9c9e6d72
+Merge: dc276c11 67b844ae
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 21:42:51 2018 -0600
+
+    Merge branch 'master' of github.com:vectorgraphics/asymptote
+
+commit dc276c116e40ef1e485fa456d75d26411d6ac1f4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 21:36:48 2018 -0600
+
+    Check for feenableexcept.
+
+commit 67b844aecc03a4b08ff8e9a8152d7cf324b4db22
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 21:36:48 2018 -0600
+
+    Check for feenableexcept.
+
+commit 13d9a1ec1cf6f6f1478cc4f590f728b0f0561725
+Merge: edf06016 bed300cc
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 21:14:51 2018 -0600
+
+    Merge pull request #54 from ivankokan/perpendicularmark
+    
+    Properly implemented "square + pen" semantics within perpendicularmark
+
+commit edf060165f9014d9aeb23673bf214b5e7b983049
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 20:54:44 2018 -0600
+
+    Fix transparent depth test.
+
+commit d75d007c08b19787bc59b3efad1337f18b8a1bde
+Merge: e0dba9d6 6ce2d6f6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 13:31:16 2018 -0600
+
+    Merge branch 'master' of github.com:vectorgraphics/asymptote
+
+commit e0dba9d6b5b00154d08c4eec793ab7cffba96cce
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 2 13:30:59 2018 -0600
+
+    Fix missing 3D underline.
+
+commit 6ce2d6f6c07e0492a222ec22a78bf7c60f75fd96
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Mar 28 17:46:50 2018 -0600
+
+    Fix issue #62 (invalid string acces).
+
+commit afd2d56d1a74a9fbd27c93f79a48947fe33bfd94
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Mar 24 17:05:23 2018 -0600
+
+    Force make clean to clear symbols.
+
+commit fc0cc036f6b3733fba8b43bf5068b009fddb6bdc
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Feb 16 12:33:25 2018 -0700
+
+    Improve diagnostic.
+
+commit 63b2310edefaef37192f596a2b6cfd97d5ce60d1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 19 20:18:17 2018 -0700
+
+    Inline call to intbits().
+
+commit 5f5a678fcb4d40fe312c511eb32189c410269a73
+Merge: c2ca99da e9906f89
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 19 01:06:50 2018 -0700
+
+    Merge branch 'master' of github.com:vectorgraphics/asymptote
+
+commit c2ca99da1f5587e077cd0e7c367b49d5eae7a172
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 19 01:05:11 2018 -0700
+
+    Fix asymmetry in angle(transform t), so that angle(yscale(-1))=0.
+
+commit 9bdc5755535489b81c6fea146aa60463de9cbcc3
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:56:37 2018 -0700
+
+    Fix path.
+
+commit e9906f89fe021471c9f7d7bd375c823ee0ea45d9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:56:37 2018 -0700
+
+    Fix path.
+
+commit f9cd516793b5d98aba083f2ef79891ccb2319adf
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:43:28 2018 -0700
+
+    Rename directory.
+
+commit b0ba7e598eae625ec5d57a214682fe41907c2500
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:40:58 2018 -0700
+
+    Fix typo.
+
+commit a8b346777b7404c480c7f9aa144239ef11288164
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:39:04 2018 -0700
+
+    Fix HOWTO-MSWindows maintainer documentation.
+
+commit bb3eb235fd4da44f56f1eb563ff6c65f48a22606
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:38:15 2018 -0700
+
+    Update HOWTO-MSWindows maintainer documentation.
+
+commit d069591eb886db59bf1bf764b3916e6b907cafd4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 12 15:22:10 2018 -0700
+
+    Add maintainer build scripts.
+
+commit 1e1e6cbbcfe65b58ead8e04d5e2b302ed011acd8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jan 11 14:00:22 2018 -0700
+
+    Fix integer division bug (due to overflow).
+
+commit 0d172a96ebb5d0c11679dd98af0fa542ff2211b3
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jan 9 09:51:04 2018 -0700
+
+    Make nativeformat PDF under MSWindows.
+
+commit 127affbfc8938f5a7ac835d8f7fb59797b852cb0
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jan 9 09:28:25 2018 -0700
+
+    Build 64-bit MSWindows binaries.
+
+commit eff28605bf5844b3570f43ad4264446c75b1e78c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 5 15:27:07 2018 -0700
+
+    Workaround broken CYGWIN xdr headers.
+
+commit bed300ccb079c06c66eee8ff4dd38d4e522bf027
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Fri Jan 5 18:55:49 2018 +0100
+
+    perpendicularmark: properly implemented "square + pen" semantics
+
+commit 952dec232e3ea77e820297f38f338fab360186fd
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jan 5 09:02:49 2018 -0700
+
+    Update Boehm garbage collector.
+
+commit 715c523b3019a59259c48a0b7f9852ce17b6128a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jan 4 22:30:21 2018 -0700
+
+    Update CYGWIN port for 64-bit build.
+
+commit 005aef0a8c45c8625910363e1159fedcd9fa31b6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Dec 18 14:51:43 2017 -0700
+
+    Fix segmentation fault.
+
+commit f791e93a9d258f03d4cf218f19772c91df4b8b35
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Dec 8 00:07:19 2017 -0700
+
+    Make Bitreverse array static.
+
+commit 2f76e4922df68ca7f5c625637cde3d8b6de00801
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Dec 5 00:30:03 2017 -0700
+
+    Update documentation.
+
+commit 4d8d83abb664f21e941ded491fe9c99ed605d4a8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Dec 4 21:47:35 2017 -0700
+
+    Make CLZ(0) return width of int type.
+
+commit 732551d1071b8e660fd44974002b5c0fb4dde574
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Dec 3 11:21:39 2017 -0700
+
+    Extend bitreverse and CLZ to long long integers.
+
+commit 6dfcb97eb80d384371cbba095ce5e0289ff649f5
+Merge: 5709f8fc 1e314cf9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Nov 23 15:33:58 2017 -0700
+
+    Merge branch 'master' of github.com:vectorgraphics/asymptote
+
+commit 5709f8fc6f1800de36d50e636332355a71d924ba
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Nov 23 15:21:55 2017 -0700
+
+    Add forcemath option to format for typesetting within an existing math mode.
+
+commit 1e314cf9b58e60b3a4b0fa930d5fe69e3e78653d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Nov 18 11:13:21 2017 -0700
+
+    Remove extraneous declaration.
+
+commit 07604b6d32201acbb236b254240f66da167e1a49
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Nov 16 20:32:08 2017 -0700
+
+    Port to latest CYGWIN.
+
+commit bdb0c70c984316552298396d0ec75f7b1c40a971
+Merge: 9db9467d 51ababda
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Nov 3 13:33:10 2017 -0600
+
+    Merge branch 'master' of github.com:vectorgraphics/asymptote
+
+commit 9db9467d4cc2c7cc2b1b09b2f9bda4ae85a7b188
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Nov 3 13:25:07 2017 -0600
+
+    Implement 32-bit bit reverse.
+
+commit 51ababdae0bb1b3b94e87bd4a005af6f4d417b59
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Oct 26 09:09:57 2017 -0600
+
+    Fix offscreen rendering initialization.
+
+commit 4e391ced23627e0ba9a318485f20c58d99545f27
+Author: prramazi <p.ramazi at gmail.com>
+Date:   Fri Oct 13 17:08:45 2017 -0600
+
+    Fix int type.
+
+commit febfdec12079aa673d8f0c66580529c208f3cedb
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Oct 11 11:20:53 2017 -0600
+
+    Fix gitignore.
+
+commit 41e6e15d4313c7ba02d947ff33d74238304c7033
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Sep 29 14:00:58 2017 -0600
+
+    Correct comment.
+
+commit fa3de734be166afe63d0d47cdf546932f7531a5a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Sep 29 11:39:07 2017 -0600
+
+    Implement string[] array(string s) and string operator +(...string[] a).
+
+commit 41d41c503c4119638baf7480c189149f6c244628
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Sep 27 16:47:24 2017 -0600
+
+    Add operator <>.
+
+commit 21f5e431ff233c8af387e305301f12cfd235c636
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Sep 25 17:14:37 2017 -0600
+
+    Implement int popcount(int) and use it to build a 64-bit int CTZ(int).
+
+commit 66fc685efa9a161b70e67c9f319d9030b2d2eea9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Sep 22 15:20:17 2017 -0600
+
+    Implement findall.
+
+commit f7231be3e560fa40f43e298e4b69b5c03ca0a141
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Aug 18 14:31:44 2017 -0600
+
+    Remove redundant vbox.
+
+commit 84f4ea3ff0a564698282af8eeb1afae14907e2fe
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Aug 4 15:33:03 2017 -0600
+
+    Improve equation support in module slide.
+
+commit 1b9692fae4a4f7bd58ea09f37178f7ed598f277d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jun 13 15:40:12 2017 -0600
+
+    Simplify example.
+
+commit 467e7c47c96da5c28aca1713b02bcecf75e7e166
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jun 13 15:38:54 2017 -0600
+
+    Remove broken empty flag.
+
+commit 5ec14a9d6f1f507b616db450896a7f275dd7ff3c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Apr 6 11:01:23 2017 -0600
+
+    Work around quote mangling bug when viewing asymptote.pdf in certain PDF
+    readers.
+
+commit 45f532f7b10565f05ff82c6f7b6833ef33a20712
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Mar 22 02:29:15 2017 -0600
+
+    Increment version to 2.42.
+
 commit 40f27e1424f6c63aa362f16f3c65b9f3d1d6e723
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Mar 22 01:56:17 2017 -0600
@@ -31,7 +388,7 @@
     Remove temporary pbsdat file.
 
 commit dacbf47554b36d0571394b3c4d747405e53f2708
-Merge: f34a52d c2e4bd5
+Merge: f34a52df c2e4bd59
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Fri Mar 17 01:48:29 2017 -0600
 
@@ -380,7 +737,7 @@
     Reinstate patch outline mode.
 
 commit a96ffbbfba55fc69b27b1c6052545bbf99ee23f8
-Merge: 0be6f55 16ae9ee
+Merge: 0be6f556 16ae9ee4
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sat Jan 21 15:45:27 2017 -0700
 
@@ -635,7 +992,7 @@
     Fix typo.
 
 commit 7ecaf8f43931d728eaf4154092cefaa4d0d0c201
-Merge: 692051a 154c47b
+Merge: 692051a2 154c47b6
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Jun 2 23:11:58 2016 -0600
 
@@ -781,7 +1138,7 @@
     Pass CC and CXX to gc configure.
 
 commit a40b6c087091bdc15ffe44d00c51ca15cb1d4877
-Merge: 656cf97 0f1f6d1
+Merge: 656cf976 0f1f6d1c
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Fri May 6 09:45:34 2016 -0600
 
@@ -858,7 +1215,7 @@
     Add progress function.
 
 commit bcbf941fdd0fa9db5c3b77d7a3477fa358a291ac
-Merge: 97f3b6c ae0af70
+Merge: 97f3b6c3 ae0af708
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sun Mar 6 22:33:57 2016 -0700
 
@@ -877,7 +1234,7 @@
     Look for kpsewhich first in the same directory as the asy executable.
 
 commit ae0af708d12981318936697c7c289fe71723dabe
-Merge: 815b738 6fc23e0
+Merge: 815b7381 6fc23e01
 Author: Charles Staats III <charles.staats.iii at gmail.com>
 Date:   Sun Mar 6 20:07:38 2016 -0800
 
@@ -909,7 +1266,7 @@
     Add EPSWRITE compiler flag to support ghostscript versions older than 9.14.
 
 commit cbb7e37c1a8ed7168bdfb61b5c48ef775b9dd668
-Merge: 9004183 6c1ad05
+Merge: 90041839 6c1ad05b
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sun Mar 6 10:04:21 2016 -0700
 
@@ -916,7 +1273,7 @@
     Merge branch 'trianglewithnormals'
 
 commit 900418390224e6f56ed33a5df55c0b47e418e1f0
-Merge: ce19f61 9a36fe8
+Merge: ce19f613 9a36fe85
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sun Mar 6 09:45:19 2016 -0700
 
@@ -977,7 +1334,7 @@
     Change adaptive rendering constant for bezier triangles.
 
 commit fc81a2ed70019cca10eed52b2caa3bff713d0d7f
-Merge: cd9f875 e78de7f
+Merge: cd9f8755 e78de7f9
 Author: Charles Staats III <charles.staats.iii at gmail.com>
 Date:   Sun Feb 28 19:23:17 2016 -0800
 
@@ -1015,7 +1372,7 @@
     Fix bug #219 Asymptote forks in an uncontrolled way.
 
 commit cd9f8755715b8ce7e5b239ecd77fdff4d336411a
-Merge: e6454cb 344698e
+Merge: e6454cb2 344698e2
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Tue Feb 16 17:41:59 2016 -0700
 
@@ -1028,7 +1385,7 @@
     Fix epsilon.
 
 commit e6454cb2370e412699d467f451519ab89efd3f40
-Merge: e5394af 75ce996
+Merge: e5394afc 75ce9969
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Tue Feb 16 17:29:10 2016 -0700
 
@@ -1169,7 +1526,7 @@
     Simplify code.
 
 commit b2d975013dfec4c2163b66286eacb8e6b9a71b56
-Merge: a2dc301 ce719eb
+Merge: a2dc3010 ce719ebe
 Author: Charles Staats III <charles.staats.iii at gmail.com>
 Date:   Fri Feb 5 08:34:14 2016 -0800
 
@@ -1176,7 +1533,7 @@
     Merge branch 'trianglewithnormals' of github.com:vectorgraphics/asymptote into trianglewithnormals
 
 commit ce719ebe712ae40a4fd31dc5e59b6c1f382cdfca
-Merge: 30d63a3 9b9e8f5
+Merge: 30d63a35 9b9e8f57
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Feb 4 23:18:11 2016 -0700
 
@@ -1189,7 +1546,7 @@
     Simplify code.
 
 commit ab2042f994b6dd71c204ddaa59124b7f3644ee58
-Merge: 5d97e7d a873617
+Merge: 5d97e7d7 a873617b
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Feb 4 23:03:06 2016 -0700
 
@@ -1208,7 +1565,7 @@
     Amend one comment.
 
 commit 8ec9865cc3fd4bc2cbded6e754ad4670e1920730
-Merge: 6ca1083 a873617
+Merge: 6ca10836 a873617b
 Author: Charles Staats III <charles.staats.iii at gmail.com>
 Date:   Thu Feb 4 21:20:20 2016 -0800
 
@@ -1239,7 +1596,7 @@
     Fix planar Bezier triangles under render=0.
 
 commit 64e1d1ad3777e898febba132ac0aae152882c52d
-Merge: 03a2310 29806bc
+Merge: 03a2310b 29806bc7
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Feb 4 01:37:46 2016 -0700
 
@@ -1538,7 +1895,7 @@
     Fix bug in rest argument signature equivalence.
 
 commit e59d44b1f641743f7eea53b18286f8ae71f7ad42
-Merge: 3fcb882 d70ce12
+Merge: 3fcb8827 d70ce121
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Fri Jan 29 00:58:56 2016 -0700
 
@@ -1551,7 +1908,7 @@
     Implement Bezier triangle vertex shading; simplify notation.
 
 commit d70ce12140bcee8f60cf4b14d86345ea1a597d24
-Merge: 9a85929 4cca8cb
+Merge: 9a859296 4cca8cba
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Jan 28 19:45:53 2016 -0700
 
@@ -1560,7 +1917,7 @@
     Fix package format
 
 commit 9a85929623975d23856c6462efaf66c1b645337e
-Merge: fec79bd daa7b97
+Merge: fec79bd9 daa7b97d
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Jan 28 19:45:10 2016 -0700
 
@@ -1577,7 +1934,7 @@
     Using the work "Emacs" is redundant here. Better to describe this as what it is: a major mode.
 
 commit fec79bd94f87e1532ab8f90c46ebeffa8ef68a34
-Merge: af459e8 799d62d
+Merge: af459e8a 799d62d7
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Jan 28 18:06:22 2016 -0700
 
@@ -1611,7 +1968,7 @@
     Rename NaN to more standard nan, consistent with inf.
 
 commit 40222e2f183510bbc3e7642ab58abaae107837d7
-Merge: 6d148e9 e6a9c8c
+Merge: 6d148e9d e6a9c8c3
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Jan 27 01:44:30 2016 -0700
 
@@ -1620,7 +1977,7 @@
     Fix asy-mode.el headers for use with package.el
 
 commit 6d148e9d4cb76e7a62b38cd7917f13f7e6b14241
-Merge: 120804c b4f5fd7
+Merge: 120804c1 b4f5fd7f
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Jan 27 01:32:44 2016 -0700
 
@@ -1627,7 +1984,7 @@
     Merge branch 'tpatch'
 
 commit 120804c135338ad70ed74c37f6391cf2bd31143b
-Merge: eeb634e dda2736
+Merge: eeb634e5 dda2736d
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Jan 27 01:32:37 2016 -0700
 
@@ -1640,7 +1997,7 @@
     Remove obsolete comment.
 
 commit dda2736d7adc54b42fb063ad04d9818c4dac1cad
-Merge: e86faf9 37a3036
+Merge: e86faf9a 37a30365
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Jan 27 01:28:31 2016 -0700
 
@@ -1647,7 +2004,7 @@
     Merge branch 'master' of github.com:vectorgraphics/asymptote
 
 commit e86faf9a90abe8546db543ba1decb3db4709a7af
-Merge: 4243c5a bb9a29b
+Merge: 4243c5af bb9a29b0
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Jan 27 01:28:01 2016 -0700
 
@@ -1654,7 +2011,7 @@
     Merge branch 'NaNconstant'
 
 commit 4abd683e6bcf1c03254a05d0f80dac2da49b796e
-Merge: 62f540f eeb634e
+Merge: 62f540f3 eeb634e5
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Jan 27 00:53:10 2016 -0700
 
@@ -1766,7 +2123,7 @@
     Define PERL.
 
 commit 2292b4e20cec169b8e49ffd90c266fe0c481280c
-Merge: 83d8788 2f0e11d
+Merge: 83d8788e 2f0e11d1
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sat Dec 5 11:59:38 2015 -0700
 
@@ -1815,7 +2172,7 @@
     Fix Bezier triangle bounds calculation.
 
 commit 78c5a4dc967871262371bc09a752c4f7c3a0982e
-Merge: 3bdb0da 71ff9e7
+Merge: 3bdb0da5 71ff9e76
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sun Nov 15 11:47:01 2015 -0700
 
@@ -1828,7 +2185,7 @@
     Support GSL 2.0.
 
 commit 3bdb0da5d7762bdc3509cbbd3aadfea392065729
-Merge: 342bd39 d7d0920
+Merge: 342bd39a d7d0920c
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Fri Nov 13 15:22:31 2015 -0700
 
@@ -1906,7 +2263,7 @@
       aligns better with the symmetry and (seems to) avoid degeneracies.
 
 commit 9607b89ce3b1dd6f41905b3ca7225304a78a4236
-Merge: b186e65 e660681
+Merge: b186e65a e660681e
 Author: Jesse Frohlich <jesse.frohlich at ualberta.ca>
 Date:   Tue Aug 18 10:56:13 2015 -0600
 
@@ -1990,7 +2347,7 @@
     Condense code.
 
 commit afc9bb50d32bc30a60e8ec14130f459ee3d07324
-Merge: 8311561 6d64099
+Merge: 83115611 6d640996
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Aug 6 16:59:34 2015 -0600
 
@@ -2019,7 +2376,7 @@
     Simplify code.
 
 commit 9a719d5a367ea6bb04ccc7d43d1b9d9ef8461ccf
-Merge: 10b58e6 6d64099
+Merge: 10b58e6f 6d640996
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Thu Aug 6 15:03:39 2015 -0600
 
@@ -2026,7 +2383,7 @@
     Merge branch 'master' into tpatch.
     
     Conflicts:
-    	configure.ac
+            configure.ac
 
 commit 10b58e6fb9c66b725c78afa5b18c356deeaa5d70
 Author: Jesse Frohlich <jesse.frohlich at ualberta.ca>
@@ -2073,7 +2430,7 @@
     Update to latest beziertriangle.cc.
 
 commit f27143b2c09b588397d2a357b6663f9872ab1526
-Merge: ce5d022 8f3274d
+Merge: ce5d022f 8f3274d4
 Author: Jesse Frohlich <jesse.frohlich at ualberta.ca>
 Date:   Wed Aug 5 12:35:30 2015 -0600
 
@@ -2088,7 +2445,7 @@
     The implementation for Bezier triangles now compiles.
 
 commit 8f3274d4b9fea2c5afbce309019779c71874f387
-Merge: 6510a21 b1041ff
+Merge: 6510a213 b1041ff1
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Aug 5 12:20:34 2015 -0600
 
@@ -2107,7 +2464,7 @@
     Add example.
 
 commit 0c9443bed41f84d8c38deac9df0be0c62474ebf4
-Merge: 6510a21 421cd19
+Merge: 6510a213 421cd19d
 Author: Jesse Frohlich <jesse.frohlich at ualberta.ca>
 Date:   Wed Aug 5 10:28:02 2015 -0600
 
@@ -2114,7 +2471,7 @@
     Merge changes in master branch to tpatch.
 
 commit 421cd19d01577dab0f3b92d89eaf1e1edf6487c2
-Merge: ecae5ee 94fb5fb
+Merge: ecae5ee6 94fb5fb6
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Tue Aug 4 18:01:02 2015 -0600
 
@@ -2133,7 +2490,7 @@
     Update INSTALL.
 
 commit 94fb5fb6792662366f0d0d9587bb2504a71c77bd
-Merge: 2cb41a4 86920eb
+Merge: 2cb41a4e 86920ebf
 Author: johncbowman <bowman at ualberta.ca>
 Date:   Tue Aug 4 17:14:19 2015 -0600
 
@@ -2170,7 +2527,7 @@
 Date:   Sat Aug 1 20:35:58 2015 -0600
 
     Update documentation for git.
-     #	doc/png/LaTeX-usage.html
+     #      doc/png/LaTeX-usage.html
 
 commit ce373e1267e1980aca6aefd86822c7daf92cc6d8
 Author: Jesse Frohlich <jesse.frohlich at ualberta.ca>
@@ -32280,7 +32637,7 @@
     Remaining import updates.
 
 commit 14735e983987b664738f9bbab29953a6cdeafd7d
-Merge: 0b62f70 9710028
+Merge: 0b62f703 9710028a
 Author: Andy Hammerlindl <ahammerlindl at gmail.com>
 Date:   Mon Nov 7 10:57:39 2005 -0600
 

Modified: trunk/Build/source/utils/asymptote/Makefile.in
===================================================================
--- trunk/Build/source/utils/asymptote/Makefile.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/Makefile.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -45,13 +45,14 @@
 
 FILES = $(COREFILES) main
 
+SYMBOLSH = opsymbols.h allsymbols.h
 DIST = camp.tab.h camp.tab.cc lex.yy.cc runtime.cc keywords.cc \
 	asy-keywords.el $(RUNTIME_FILES:=.cc) $(RUNTIME_FILES:=.h) asy.list \
-        allsymbols.h opsymbols.h $(SYMBOL_FILES:=.symbols.h) 
+        $(SYMBOLSH) $(SYMBOL_FILES:=.symbols.h) 
 NAME = asy
 XNAME = x$(NAME)
 CLEAN = camp.output base/version.asy doc/version.texi \
-        GUI/xasyVersion.py $(XNAME) doc/asy-latex.pdf
+        GUI/xasyVersion.py $(XNAME) doc/asy-latex.pdf $(SYMBOLSH)
 EXTRA = asy-mode.el asy-init.el asy.vim asy_filetype.vim asy-kate.sh \
         asymptote.py reload.js nopapersize.ps
 EXEXTRA = piicon.eps *.views *.dat *.bib
@@ -193,7 +194,7 @@
 	$(CXX) -E -DNOSYM $(OPTS) $(INCL) $(SYMBOL_FILES:=.cc) | \
           $(PERL) ./findsym.pl $@ -
 
-symbol.o: opsymbols.h allsymbols.h
+symbol.o: $(SYMBOLSH)
 
 camp.tab.cc: camp.y
 	$(BISON) -dvt -b camp camp.y && mv camp.tab.c camp.tab.cc

Modified: trunk/Build/source/utils/asymptote/ReleaseNotes
===================================================================
--- trunk/Build/source/utils/asymptote/ReleaseNotes	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/ReleaseNotes	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,3 +1,10 @@
+Release Notes for Version 2.42
+
+Bitreverse and popcount functions were added. An overflow in the modulo
+operator was fixed. An asymmetry in angle(transform t) was fixed so that
+angle(yscale(-1))=0. Missing 3D underline characters were fixed.
+The MSWindows binary is now 64-bit.
+
 Release Notes for Version 2.41
 
 The rendering of Bezier patches was improved. Minor improvements were made

Modified: trunk/Build/source/utils/asymptote/asy-keywords.el
===================================================================
--- trunk/Build/source/utils/asymptote/asy-keywords.el	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/asy-keywords.el	2018-04-03 22:35:04 UTC (rev 47274)
@@ -2,16 +2,16 @@
 ;; This file is automatically generated by asy-list.pl.
 ;; Changes will be overwritten.
 ;;
-(defvar asy-keywords-version "2.41")
+(defvar asy-keywords-version "2.42")
 
 (defvar asy-keyword-name '(
 and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
 
 (defvar asy-type-name '(
-Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola indexedTransform int inversion key light line linefit marginT marker mass object pair parabola patch path path3 pen picture point position positionedvector projection real revolution scaleT scientific segment side slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
+Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola indexedTransform int inversion key light line linefit marginT marker mass object pair parabola patch path path3 pen picture point position positionedvector projection rational real revolution scaleT scientific segment side slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
 
 (defvar asy-function-name '(
-AND Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _strokepath _texpath aCos aSin aTan abort abs accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure!
  asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPRCcylinder drawPRCdisk drawPRCsphere drawPRCtube drawPhoton drawScalar drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawV!
 ertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endScript endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitXasyMode exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface incenter incentral incircle increasing incrementposition indexedTransform indexedfigure initXasyMode initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log!
 10 log1p logaxiscoverage longitude lookup make3dgrid makeNode makecircle makedraw makepen maketriangle map margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural needshipout newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa none norm normalout normalvideo nosetpagesize notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocentercenter outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof!
  segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys startScript stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _strokepath _texpath aCos aSin aTan abort abs accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure!
  asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPRCcylinder drawPRCdisk drawPRCsphere drawPRCtube drawPhoton drawScalar drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVer!
 texOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endScript endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitXasyMode exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface incenter incentral incircle increasing incrementposition indexedTransform indexedfigure initXasyMode initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate !
 locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeNode makecircle makedraw makepen maketriangle map margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural needshipout newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa none norm normalout normalvideo nosetpagesize notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocentercenter outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchtree sec secondaryX secondaryY!
  seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys startScript stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
 
 (defvar asy-variable-name '(
-AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna S!
 ilver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange ZHIGH ZLOW addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diagnostics differentlengths dot dotfactor dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavyg!
 rey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity4 ignore inXasyMode inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings shipped signedtrailingzero solid spinner springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRan!
 dom undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize vline white wye xformStack yellow ylabelwidth zerotickfuzz zerowinding ))
+AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna S!
 ilver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange ZHIGH ZLOW aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diagnostics differentlengths dot dotfactor dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray!
  heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity4 ignore inXasyMode inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings shipped signedtrailingzero solid spinner springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFr!
 equency trembleRandom undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize vline white wye xformStack yellow ylabelwidth zerotickfuzz zerowinding ))

Modified: trunk/Build/source/utils/asymptote/asy.list
===================================================================
--- trunk/Build/source/utils/asymptote/asy.list	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/asy.list	2018-04-03 22:35:04 UTC (rev 47274)
@@ -6,6 +6,7 @@
 pen royalblue;
 real arrowdir;
 filltype filltype(int type=<default>, pen fillpen=<default>, pen drawpen=<default>, void fill2(frame f, path[] g, pen fillpen));
+void addArrow(picture pic, arrowhead arrowhead, path g, pen p, real size, real angle, filltype filltype, real position);
 int Suppress;
 align NoAlign;
 filltype RadialShade(pen penc, pen penr);
@@ -33,6 +34,7 @@
 void addSaveFunction(void s()());
 pen olive;
 pen zerowinding;
+frame pack(pair align=<default> ... object[] inset);
 pen deepmagenta;
 path[] margin(path[] g, real xmargin, real ymargin);
 string file(string s);
@@ -42,6 +44,8 @@
 pen darkgreen;
 string verbatim(string s);
 pen heavygray;
+bool ArcArrows(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
+bool ArcArrows(picture, path, pen, marginT(path, pen));
 pen darkred;
 pair E;
 plain_scaling plain_scaling;
@@ -56,10 +60,14 @@
 triple gettriple(string name=<default>, triple default=<default>, string prompt=<default>, bool store=<default>);
 pen Yellow;
 real cm;
+bool EndBar(picture, path, pen, marginT(path, pen));
+bool EndBar(picture, path, pen, marginT(path, pen))(real size=<default>);
 pen mediumgreen;
 pen heavygreen;
 pen dashdotted;
 bool diagnostics;
+int debuggerlines;
+frame bbox(picture pic=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>);
 pen deepblue;
 string graphicscale(real x);
 pen mediumblue;
@@ -66,17 +74,15 @@
 pen heavyblue;
 transform invert;
 pair NNW;
+void drawarrow2(frame f, arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>);
 pair SE;
 pen thick(pen p=<default>);
 pen mediumred;
 marginT EndDotMargin(path, pen);
-bool ArcArrows(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
-bool ArcArrows(picture, path, pen, marginT(path, pen));
 void filloutside(picture pic=<default>, path[] g, pen p=<default>, bool copy=<default>);
 void filloutside(frame f, path[] g, pen p=<default>, bool copy=<default>);
 filltype RadialShadeDraw(real xmargin=<default>, real ymargin=<default>, pen penc, pen penr, pen drawpen=<default>);
 marginT BeginDotMargin(path, pen);
-frame enclose(string prefix=<default>, object F, string format=<default>);
 marker[] Mark;
 marker Mark(int n);
 projection projection(triple camera, triple up=<default>, triple target=<default>, triple normal=<default>, real zoom=<default>, real angle=<default>, pair viewportshift=<default>, bool showtarget=<default>, bool autoadjust=<default>, bool center=<default>, transformation projector(triple camera, triple up, triple target));
@@ -83,7 +89,6 @@
 pen darkolive;
 pen Dotted;
 pen Dotted(pen p=<default>);
-string math(real x);
 string math(string s);
 transform fixedscaling(picture pic=<default>, pair min, pair max, pen p=<default>, bool warn=<default>);
 pen Symbol(string series=<default>, string shape=<default>);
@@ -90,37 +95,21 @@
 bool needshipout();
 int count;
 path circle(pair c, real r);
-path ellipse(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-path ellipse(frame f, Label L, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-path ellipse(pair c, real a, real b);
 void updatefunction();
 pen beveljoin;
 pen orange;
 pen green;
-int getint(string name=<default>, int default=<default>, string prompt=<default>, bool store=<default>);
-bool EndBar(picture, path, pen, marginT(path, pen));
-bool EndBar(picture, path, pen, marginT(path, pen))(real size=<default>);
 file stdin;
-int debuggerlines;
-frame bbox(picture pic=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>);
 path unitcircle;
 arrowhead DefaultHead;
 pen white;
-scaleT scaleT(real T(real x), real Tinv(real x), bool logarithmic=<default>, bool automin=<default>, bool automax=<default>);
-string baseline(string s, string template=<default>);
 position EndPoint;
 Legend Legend(string label, pen plabel=<default>, pen p=<default>, frame mark=<default>, bool above=<default>);
 void exitfunction();
-void drawarrow(frame f, arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>, bool forwards=<default>, marginT margin(path, pen)=<default>, bool center=<default>);
 string cputimeformat;
 pair arcpoint(path p, real L);
 bool interior(int windingnumber, pen fillrule);
 pen fuchsia;
-pair[] pairs(real[] x, real[] y);
-void eval(code s, bool embedded=<default>);
-void eval(string s, bool embedded=<default>);
-bool Arrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
-bool Arrow(picture, path, pen, marginT(path, pen));
 pen brown;
 void bar(picture pic, pair a, pair d, pen p=<default>);
 picture bar(pair a, pair d, pen p=<default>);
@@ -133,8 +122,11 @@
 int mantissaBits;
 void copyPairOrTriple(pairOrTriple dest, pairOrTriple src);
 pen lightolive;
+string outprefix(string prefix=<default>);
+object object(frame f);
+object object(Label L);
+object object(Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
 path arrowbase(path r, pair y, real t, real size);
-frame pack(pair align=<default> ... object[] inset);
 pen[] monoPen;
 bool CW;
 pen Cyan;
@@ -141,12 +133,12 @@
 marginT EndPenMargin(path, pen);
 pair NNE;
 pen roundjoin;
-void addArrow(picture pic, arrowhead arrowhead, path g, pen p, real size, real angle, filltype filltype, real position);
 pen lightgray;
-picture arrow2(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>);
 void startScript();
 pair relative(picture pic=<default>, pair z);
 position MidPoint;
+bool ArcArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
+bool ArcArrow(picture, path, pen, marginT(path, pen));
 string Embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>);
 pen deepgrey;
 pen lightyellow;
@@ -156,6 +148,9 @@
 file stdout;
 frame Seascape(frame f);
 pair up;
+void savedefaults()();
+bool MidArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
+bool MidArrow(picture, path, pen, marginT(path, pen));
 pen ZapfChancery(string series=<default>, string shape=<default>);
 pair left;
 bool prconly(string format=<default>);
@@ -167,13 +162,17 @@
 marginT DotMargins(path, pen);
 path[] MarkPath;
 pen deepgray;
+bool BeginArcArrow(picture, path, pen, marginT(path, pen));
+bool BeginArcArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
 string defaultformat(int n, string trailingzero=<default>, bool fixed=<default>, bool signed=<default>);
 string defaultformat;
 pen lightcyan;
 pen paleblue;
+real legendmargin;
+bool None(picture, path, pen, marginT(path, pen));
 frame align(frame f, pair align);
+path[] align(path[] g, transform t=<default>, pair position, pair align, pen p=<default>);
 object align(object F, pair align);
-path[] align(path[] g, transform t=<default>, pair position, pair align, pen p=<default>);
 transform scaleless(transform t);
 pen thin();
 real arcarrowangle;
@@ -188,15 +187,12 @@
 guide operator ---(... guide[]);
 int JOIN_IN;
 real barfactor;
-void arrow(picture pic=<default>, Label L=<default>, pair b, pair dir, real length=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
-picture arrow(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>, bool forwards=<default>, marginT margin(path, pen)=<default>, bool center=<default>);
-void unitsize(picture pic=<default>, real x, real y=<default>, real z=<default>);
 pen lightgreen;
 void endl(file file);
-bool ArcArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
-bool ArcArrow(picture, path, pen, marginT(path, pen));
 void usersetting();
 bool prc0(string format=<default>);
+bool Bars(picture, path, pen, marginT(path, pen));
+bool Bars(picture, path, pen, marginT(path, pen))(real size=<default>);
 pair rectify(pair dir);
 arrowhead TeXHead;
 void beep();
@@ -205,9 +201,6 @@
 pen lightblue;
 real bracemidangle;
 path unitsquare;
-void savedefaults()();
-bool MidArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>);
-bool MidArrow(picture, path, pen, marginT(path, pen));
 pen cyan;
 pen grey;
 transform rotation(transform t);
@@ -215,6 +208,8 @@
 pen magenta;
 pair WSW;
 pen nobasealign;
+bool BeginArrow(picture, path, pen, marginT(path, pen));
+bool BeginArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
 frame Landscape(frame f);
 real camerafactor;
 pen lightred;
@@ -224,17 +219,13 @@
 pen squarepen;
 pen deepyellow;
 real barsize(pen p=<default>);
-bool BeginArcArrow(picture, path, pen, marginT(path, pen));
-bool BeginArcArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
-real legendmargin;
-bool None(picture, path, pen, marginT(path, pen));
 pen AvantGarde(string series=<default>, string shape=<default>);
 real circleprecision;
 pen Black;
-pen Bookman(string series=<default>, string shape=<default>);
+path box(pair a, pair b);
 path box(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
 path box(frame f, Label L, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-path box(pair a, pair b);
+pen Bookman(string series=<default>, string shape=<default>);
 frame[] fit(string prefix=<default>, picture[] pictures, string format=<default>, bool view=<default>, string options=<default>, string script=<default>, projection P=<default>);
 void report(string text);
 void report(int i);
@@ -249,12 +240,11 @@
 path arc(pair c, real r, real angle1, real angle2, bool direction);
 pair right;
 string outformat(string format=<default>);
-string outprefix(string prefix=<default>);
-object object(Label L);
-object object(Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-object object(frame f);
+marker markthin(path g, pen p=<default>, real thin(real fraction)=<default>, filltype filltype=<default>);
 filltype Fill;
 filltype Fill(real xmargin=<default>, real ymargin=<default>, pen p=<default>);
+bool EndArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
+bool EndArrow(picture, path, pen, marginT(path, pen));
 pen Palatino(string series=<default>, string shape=<default>);
 pair[] intersectionpoints(path p, path q, real fuzz=<default>);
 pair[] intersectionpoints(explicit path[] p, explicit path[] q, real fuzz=<default>);
@@ -272,8 +262,7 @@
 bool finite(triple v);
 filltype UnFill(real xmargin=<default>, real ymargin=<default>);
 filltype UnFill;
-bool Bars(picture, path, pen, marginT(path, pen));
-bool Bars(picture, path, pen, marginT(path, pen))(real size=<default>);
+frame enclose(string prefix=<default>, object F, string format=<default>);
 pair I;
 pair SSW;
 transform Slant(transform t);
@@ -295,11 +284,14 @@
 pen heavygrey;
 void markuniform(picture pic=<default>, frame f, path g)(pair z(real t), real a, real b, int n);
 void markuniform(picture pic=<default>, frame f, path g)(bool centered=<default>, int n, bool rotated=<default>);
-bool BeginArrow(picture, path, pen, marginT(path, pen));
-bool BeginArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
+bool ignore;
 real circlescale;
-bool ignore;
+frame dotframe(pen p=<default>, filltype filltype=<default>);
+frame dotframe;
 pen darkblue;
+path ellipse(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+path ellipse(frame f, Label L, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+path ellipse(pair c, real a, real b);
 real reltime(path p, real l);
 void marknodes(picture pic=<default>, frame f, path g);
 int JOIN_OUT;
@@ -310,20 +302,20 @@
 arrowhead HookHead(real dir=<default>, real barb=<default>);
 real[] concat(... real[][]);
 picture[] concat(... picture[][]);
-marker[] concat(... marker[][]);
 pair[] concat(... pair[][]);
 pen[] concat(... pen[][]);
 coord[] concat(... coord[][]);
-coord[] concat(... coord[][]);
+object[] concat(... object[][]);
 Legend[] concat(... Legend[][]);
 path[] concat(... path[][]);
+coord[] concat(... coord[][]);
+Label[] concat(... Label[][]);
 int[] concat(... int[][]);
 void()()[] concat(... void()()[][]);
 bool3[] concat(... bool3[][]);
 string[] concat(... string[][]);
-object[] concat(... object[][]);
+marker[] concat(... marker[][]);
 triple[] concat(... triple[][]);
-Label[] concat(... Label[][]);
 frame[] concat(... frame[][]);
 guide[] concat(... guide[][]);
 bool[] concat(... bool[][]);
@@ -336,15 +328,19 @@
 pen palecyan;
 marginT BeginMargin(path, pen);
 path buildcycle(... path[] p);
-marker markthin(path g, pen p=<default>, real thin(real fraction)=<default>, filltype filltype=<default>);
+void unitsize(picture pic=<default>, real x, real y=<default>, real z=<default>);
+void arrow(picture pic=<default>, Label L=<default>, pair b, pair dir, real length=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
+picture arrow(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>, bool forwards=<default>, marginT margin(path, pen)=<default>, bool center=<default>);
+pair[] pairs(real[] x, real[] y);
+void eval(code s, bool embedded=<default>);
+void eval(string s, bool embedded=<default>);
+bool Arrow(picture, path, pen, marginT(path, pen));
+bool Arrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
 void activatequote(picture pic=<default>);
 int undefined;
-void drawarrow2(frame f, arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>);
 pen roundcap;
 void buildRestoreThunk()();
 void overloadedMessage(file file);
-bool EndArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
-bool EndArrow(picture, path, pen, marginT(path, pen));
 frame currentpatterns;
 real arrowfactor;
 pen heavyred;
@@ -365,11 +361,9 @@
 pair[][] array(int n, pair[] value, int depth=<default>);
 bool3[] array(int n, bool3 value, int depth=<default>);
 coord[] array(int n, coord value, int depth=<default>);
-coord[] array(int n, coord value, int depth=<default>);
+object[] array(int n, object value, int depth=<default>);
 picture[] array(int n, picture value, int depth=<default>);
-marker[] array(int n, marker value, int depth=<default>);
 Legend[] array(int n, Legend value, int depth=<default>);
-Label[] array(int n, Label value, int depth=<default>);
 real[][] array(int n, real[] value, int depth=<default>);
 real[] array(int n, real value, int depth=<default>);
 triple[] array(int n, triple value, int depth=<default>);
@@ -376,24 +370,29 @@
 path[] array(int n, path value, int depth=<default>);
 frame[] array(int n, frame value, int depth=<default>);
 pen[][] array(int n, pen[] value, int depth=<default>);
-object[] array(int n, object value, int depth=<default>);
+coord[] array(int n, coord value, int depth=<default>);
+marker[] array(int n, marker value, int depth=<default>);
+Label[] array(int n, Label value, int depth=<default>);
 int[] array(int n, int value, int depth=<default>);
 string[][] array(int n, string[] value, int depth=<default>);
 pair[] array(int n, pair value, int depth=<default>);
 guide[] array(int n, guide value, int depth=<default>);
 pen[] array(int n, pen value, int depth=<default>);
+string[] array(string s);
 real[] uniform(real a, real b, int n);
 pair viewportsize;
+picture arrow2(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>);
+void drawarrow(frame f, arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>, bool forwards=<default>, marginT margin(path, pen)=<default>, bool center=<default>);
 picture currentpicture;
 pen palegreen;
+Label Label(Label L, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
 Label Label(Label L, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
 Label Label(string s, string size=<default>, explicit position position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
 Label Label(Label L, explicit position position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
+Label Label;
 Label Label(explicit pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
-Label Label;
 Label Label(string s=<default>, string size=<default>, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
 Label Label(string s, string size=<default>, pair position, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
-Label Label(Label L, align align=<default>, pen p=<default>, transform embed(transform)=<default>, filltype filltype=<default>);
 hsv hsv(real h, real s, real v);
 hsv hsv(pen p);
 pair N;
@@ -409,12 +408,13 @@
 transform Rotate(transform)(pair z);
 transform Rotate(transform t);
 bool inXasyMode;
-frame dotframe(pen p=<default>, filltype filltype=<default>);
-frame dotframe;
 real arcarrowfactor;
 real mm;
 plain plain;
+int getint(string name=<default>, int default=<default>, string prompt=<default>, bool store=<default>);
+int bitreverse(int a, int bits);
 int CTZ(int a);
+int popcount(int a);
 int NOT(int a);
 int XOR(int a, int b);
 int OR(int a, int b);
@@ -421,8 +421,8 @@
 real[][] scale3(real s);
 int AND(int a, int b);
 real[] cubicroots(real a, real b, real c, real d);
+void attach(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void attach(picture dest=<default>, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void attach(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 real[] quadraticroots(real a, real b, real c);
 pair[] quadraticroots(explicit pair a, explicit pair b, explicit pair c);
 path[] strokepath(path g, pen p=<default>);
@@ -618,8 +618,8 @@
 void clear(string file, string text);
 void unfill(frame f, path[] g, bool copy=<default>);
 void unfill(picture pic=<default>, path[] g, bool copy=<default>);
+bool Bar(picture, path, pen, marginT(path, pen));
 bool Bar(picture, path, pen, marginT(path, pen))(real size=<default>);
-bool Bar(picture, path, pen, marginT(path, pen));
 bool eol(file f);
 bool eof(file f);
 pen paleyellow;
@@ -657,9 +657,9 @@
 void dot(picture pic=<default>, pair z, pen p=<default>, filltype filltype=<default>);
 void dot(frame f, pair z, pen p=<default>, filltype filltype=<default>);
 void dot(picture pic=<default>, Label L, pen p=<default>, filltype filltype=<default>);
+marker dot;
 void dot(picture pic=<default>, Label[] L=<default>, pair[] z, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
 void dot(picture pic=<default>, path[] g, pen p=<default>, filltype filltype=<default>);
-marker dot;
 void dot(picture pic=<default>, Label L, pair z, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
 pair ESE;
 pair project(triple v, real[][] t);
@@ -666,6 +666,9 @@
 real[][] AtA(real[][] a);
 real[] solve(real[][] a, real[] b, bool warn=<default>);
 real[][] solve(real[][] a, real[][] b, bool warn=<default>);
+scaleT scaleT(real T(real x), real Tinv(real x), bool logarithmic=<default>, bool automin=<default>, bool automax=<default>);
+string baseline(string s, string template=<default>);
+int[] findall(bool[] a);
 bool BeginBar(picture, path, pen, marginT(path, pen));
 bool BeginBar(picture, path, pen, marginT(path, pen))(real size=<default>);
 triple perp(triple v, triple u);
@@ -677,7 +680,9 @@
 bool operator !(bool b);
 int[] sequence(int n);
 pen[][] sequence(pen[] f(int), int n);
-object[] sequence(object f(int), int n);
+coord[] sequence(coord f(int), int n);
+marker[] sequence(marker f(int), int n);
+Label[] sequence(Label f(int), int n);
 int[] sequence(int f(int), int n);
 string[][] sequence(string[] f(int), int n);
 pair[] sequence(pair f(int), int n);
@@ -689,11 +694,9 @@
 pair[][] sequence(pair[] f(int), int n);
 bool3[] sequence(bool3 f(int), int n);
 coord[] sequence(coord f(int), int n);
-coord[] sequence(coord f(int), int n);
+object[] sequence(object f(int), int n);
 picture[] sequence(picture f(int), int n);
-marker[] sequence(marker f(int), int n);
 Legend[] sequence(Legend f(int), int n);
-Label[] sequence(Label f(int), int n);
 real[][] sequence(real[] f(int), int n);
 real[] sequence(real f(int), int n);
 int[] sequence(int n, int m);
@@ -749,18 +752,18 @@
 void draw(frame f, triple[][] p, real[] uknot, real[] vknot, real[][] weights=<default>, pen[] p, real opacity, real shininess, real prcshininess, pen[] colors);
 void draw(frame f, triple[] v, int[][] vi, triple[] n, int[][] ni, pen[] p, real opacity, real shininess, real prcshininess, pen[] c=<default>, int[][] ci=<default>);
 void draw(picture pic=<default>, path[] g, pen fillrule=<default>, pen[] p);
-object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), pair position, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+void draw(frame f, explicit path[] g, pen p=<default>);
+void draw(frame f, path g, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen)));
 void draw(picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
 void draw(pair origin, picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(frame f, explicit path[] g, pen p=<default>);
 void draw(picture pic=<default>, guide[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
 void draw(pair origin, picture pic=<default>, guide[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
+object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), pair position, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
 void draw(picture pic=<default>, explicit path[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
 void draw(pair origin, picture pic=<default>, explicit path[] g, pen p=<default>, Label legend=<default>, marker marker=<default>);
-object draw(picture pic=<default>, Label L, path e(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>), real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
 void draw(frame f, guide[] g, pen p=<default>);
 void draw(frame f, path g, pen p=<default>);
-void draw(frame f, path g, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen)));
 void deconstruct(frame f, frame preamble=<default>, real magnification=<default>, transform xform());
 void deconstruct(picture pic=<default>, real magnification=<default>);
 void shipout3(string prefix, frame f, string format=<default>, real width, real height, real angle, real zoom, triple m, triple m, pair shift, real[][] t, real[] background, triple[] lights, real[][] diffuse, real[][] ambient, real[][] specular, bool viewportlighting, bool view=<default>);
@@ -794,23 +797,23 @@
 void tex(picture pic=<default>, string s, pair min, pair max);
 void prepend(frame dest, frame src);
 void add(frame dest, frame src);
+void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
+void add(frame dest, frame src, filltype filltype, bool above=<default>);
+void add(frame dest, frame src, bool group, filltype filltype=<default>, bool above=<default>);
+void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
+void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
+void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
+void add(picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(picture dest=<default>, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(frame dest, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
-void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
+void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, projection P), bool exact=<default>);
+void add(picture pic=<default>, void d(picture, transform), bool exact=<default>);
+void add(picture dest, picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(picture pic=<default>, Label L);
-void add(picture dest, picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(frame f, transform t=<default>, Label L);
 void add(picture dest, picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(picture dest=<default>, object F, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(frame dest, frame src, filltype filltype, bool above=<default>);
-void add(frame dest, frame src, bool group, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, projection P), bool exact=<default>);
-void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, void d(picture, transform), bool exact=<default>);
-void add(picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void endgroup3(frame f);
 void _begingroup3(frame f, string name, real compression, real granularity, bool closed, bool tessellate, bool dobreak, bool nobreak, triple center, int interaction);
 void endgroup(frame f);
@@ -1042,32 +1045,34 @@
 string VERSION;
 bool alias(pair[][] a, pair[][] b);
 bool alias(guide[] a, guide[] b);
-bool alias(marginT a, marginT b);
+bool alias(hsv a, hsv b);
+bool alias(coord[] a, coord[] b);
 bool alias(scaleT a, scaleT b);
-bool alias(object a, object b);
-bool alias(cputime a, cputime b);
+bool alias(side a, side b);
+bool alias(marker a, marker b);
+bool alias(Label[] a, Label[] b);
 bool alias(pair[] a, pair[] b);
+bool alias(scaling a, scaling b);
 bool alias(coord a, coord b);
-bool alias(coord a, coord b);
 bool alias(Legend a, Legend b);
-bool alias(side a, side b);
-bool alias(framedTransformStack a, framedTransformStack b);
-bool alias(Label[] a, Label[] b);
+bool alias(object a, object b);
+bool alias(cputime a, cputime b);
 bool alias(int[] a, int[] b);
 bool alias(string[][] a, string[][] b);
-bool alias(slice a, slice b);
+bool alias(filltype a, filltype b);
 bool alias(freezableBounds a, freezableBounds b);
 bool alias(projection a, projection b);
-bool alias(position a, position b);
-bool alias(arrowhead a, arrowhead b);
+bool alias(framedTransformStack a, framedTransformStack b);
 bool alias(real[][] a, real[][] b);
 bool alias(bool3 a, bool3 b);
 bool alias(bool3[] a, bool3[] b);
 bool alias(autoscaleT a, autoscaleT b);
+bool alias(position a, position b);
+bool alias(arrowhead a, arrowhead b);
 bool alias(string[] a, string[] b);
 bool alias(frame[] a, frame[] b);
+bool alias(coords2 a, coords2 b);
 bool alias(scaling a, scaling b);
-bool alias(scaling a, scaling b);
 bool alias(bounds a, bounds b);
 bool alias(light a, light b);
 bool alias(pairOrTriple a, pairOrTriple b);
@@ -1074,29 +1079,27 @@
 bool alias(bool[] a, bool[] b);
 bool alias(void()()[] a, void()()[] b);
 bool alias(pen[][] a, pen[][] b);
-bool alias(filltype a, filltype b);
+bool alias(marginT a, marginT b);
 bool alias(coord[] a, coord[] b);
-bool alias(coord[] a, coord[] b);
 bool alias(coords3 a, coords3 b);
-bool alias(Label a, Label b);
+bool alias(align a, align b);
+bool alias(object[] a, object[] b);
 bool alias(Legend[] a, Legend[] b);
-bool alias(processtime a, processtime b);
 bool alias(path[] a, path[] b);
 bool alias(triple[] a, triple[] b);
+bool alias(coord a, coord b);
 bool alias(ScaleT a, ScaleT b);
-bool alias(align a, align b);
-bool alias(object[] a, object[] b);
-bool alias(indexedTransform a, indexedTransform b);
+bool alias(Label a, Label b);
+bool alias(marker[] a, marker[] b);
+bool alias(processtime a, processtime b);
 bool alias(real[] a, real[] b);
 bool alias(pen[] a, pen[] b);
-bool alias(hsv a, hsv b);
+bool alias(slice a, slice b);
 bool alias(coords2 a, coords2 b);
-bool alias(coords2 a, coords2 b);
 bool alias(transformation a, transformation b);
 bool alias(picture a, picture b);
 bool alias(picture[] a, picture[] b);
-bool alias(marker a, marker b);
-bool alias(marker[] a, marker[] b);
+bool alias(indexedTransform a, indexedTransform b);
 real pi;
 void initXasyMode();
 int randMax;
@@ -1118,26 +1121,26 @@
 int[] map(int f(real), real[] a);
 bool3[] map(bool3 f(bool3), bool3[] a);
 frame[] map(frame f(frame), frame[] a);
+coord[] map(coord f(coord), coord[] a);
+Label[] map(Label f(Label), Label[] a);
 pen[][] map(pen[] f(pen[]), pen[][] a);
 triple[] map(triple f(triple), triple[] a);
 pen[] map(pen f(pen), pen[] a);
 coord[] map(coord f(coord), coord[] a);
-coord[] map(coord f(coord), coord[] a);
+object[] map(object f(object), object[] a);
 Legend[] map(Legend f(Legend), Legend[] a);
 pair[] map(pair f(pair), pair[] a);
 string[] map(string f(string), string[] a);
 picture[] map(picture f(picture), picture[] a);
-marker[] map(marker f(marker), marker[] a);
 void()()[] map(void f()()(void()()), void()()[] a);
 pair[][] map(pair[] f(pair[]), pair[][] a);
 real[] map(real f(real), real[] a);
 int[] map(int f(int), int[] a);
 string[][] map(string[] f(string[]), string[][] a);
-Label[] map(Label f(Label), Label[] a);
 bool[] map(bool f(bool), bool[] a);
 path[] map(path f(path), path[] a);
 real[][] map(real[] f(real[]), real[][] a);
-object[] map(object f(object), object[] a);
+marker[] map(marker f(marker), marker[] a);
 guide[] map(guide f(guide), guide[] a);
 real identity(real x);
 real[] identity(real[] a);
@@ -1153,9 +1156,8 @@
 path brace(pair a, pair b, real amplitude=<default>);
 void deactivatequote(picture pic=<default>);
 string format(string format, int x, string locale=<default>);
-string format(string format, string separator, real x, string locale=<default>);
-string format(string format, real x, string locale=<default>);
-string format(real x, string locale=<default>);
+string format(string format, bool forcemath=<default>, string separator, real x, string locale=<default>);
+string format(string format=<default>, bool forcemath=<default>, real x, string locale=<default>);
 real expm1(real x);
 real[] expm1(real[] a);
 void label(frame f, string s, string size, transform t, pair position, pair align, pen p);
@@ -1253,21 +1255,21 @@
 int search(string[] a, string key);
 int search(void()()[] a, void key()(), bool less(void()(), void()()));
 int search(picture[] a, picture key, bool less(picture, picture));
-int search(marker[] a, marker key, bool less(marker, marker));
 int search(real[] a, real key, bool less(real, real));
 int search(guide[] a, guide key, bool less(guide, guide));
 int search(pair[] a, pair key, bool less(pair, pair));
 int search(coord[] a, coord key, bool less(coord, coord));
-int search(coord[] a, coord key, bool less(coord, coord));
+int search(object[] a, object key, bool less(object, object));
 int search(Legend[] a, Legend key, bool less(Legend, Legend));
 int search(frame[] a, frame key, bool less(frame, frame));
+int search(coord[] a, coord key, bool less(coord, coord));
+int search(Label[] a, Label key, bool less(Label, Label));
 int search(int[] a, int key, bool less(int, int));
 int search(bool3[] a, bool3 key, bool less(bool3, bool3));
-int search(object[] a, object key, bool less(object, object));
+int search(marker[] a, marker key, bool less(marker, marker));
 int search(string[] a, string key, bool less(string, string));
 int search(path[] a, path key, bool less(path, path));
 int search(pen[] a, pen key, bool less(pen, pen));
-int search(Label[] a, Label key, bool less(Label, Label));
 int search(bool[] a, bool key, bool less(bool, bool));
 int search(triple[] a, triple key, bool less(triple, triple));
 int[] sort(int[] a);
@@ -1276,7 +1278,6 @@
 real[][] sort(real[][] a);
 string[] sort(string[] a);
 string[][] sort(string[][] a);
-Label[] sort(Label[] a, bool less(Label, Label));
 path[] sort(path[] a, bool less(path, path));
 pair[] sort(pair[] a, bool less(pair, pair));
 void()()[] sort(void()()[] a, bool less(void()(), void()()));
@@ -1283,21 +1284,22 @@
 real[] sort(real[] a, bool less(real, real));
 bool[] sort(bool[] a, bool less(bool, bool));
 picture[] sort(picture[] a, bool less(picture, picture));
-marker[] sort(marker[] a, bool less(marker, marker));
 pen[] sort(pen[] a, bool less(pen, pen));
 pen[][] sort(pen[][] a, bool less(pen[], pen[]));
 coord[] sort(coord[] a, bool less(coord, coord));
-coord[] sort(coord[] a, bool less(coord, coord));
+object[] sort(object[] a, bool less(object, object));
 Legend[] sort(Legend[] a, bool less(Legend, Legend));
 guide[] sort(guide[] a, bool less(guide, guide));
 real[][] sort(real[][] a, bool less(real[], real[]));
 triple[] sort(triple[] a, bool less(triple, triple));
+coord[] sort(coord[] a, bool less(coord, coord));
+Label[] sort(Label[] a, bool less(Label, Label));
 string[] sort(string[] a, bool less(string, string));
 int[] sort(int[] a, bool less(int, int));
 string[][] sort(string[][] a, bool less(string[], string[]));
 bool3[] sort(bool3[] a, bool less(bool3, bool3));
 pair[][] sort(pair[][] a, bool less(pair[], pair[]));
-object[] sort(object[] a, bool less(object, object));
+marker[] sort(marker[] a, bool less(marker, marker));
 frame[] sort(frame[] a, bool less(frame, frame));
 pair postcontrol(path p, int t);
 pair postcontrol(path p, real t);
@@ -1329,11 +1331,11 @@
 pair max(explicit path p);
 pair max(path[] p);
 triple max(path3 p);
+real max(real M, scaling s, coord[] c);
 int max(... int[] a);
 pair max(picture pic, bool user=<default>);
 real max(... real[] a);
 real max(real M, scaling s, coord[] c);
-real max(real M, scaling s, coord[] c);
 void restore();
 pen basealign(int n);
 int basealign(pen p=<default>);
@@ -1434,7 +1436,9 @@
 bool[] copy(bool[] a, int depth=<default>);
 real[][] copy(real[][] a, int depth=<default>);
 pen[] copy(pen[] a, int depth=<default>);
-object[] copy(object[] a, int depth=<default>);
+coord[] copy(coord[] a, int depth=<default>);
+marker[] copy(marker[] a, int depth=<default>);
+Label[] copy(Label[] a, int depth=<default>);
 pen[][] copy(pen[][] a, int depth=<default>);
 path[] copy(path[] a, int depth=<default>);
 string[] copy(string[] a, int depth=<default>);
@@ -1445,11 +1449,9 @@
 pair[] copy(pair[] a, int depth=<default>);
 bool3[] copy(bool3[] a, int depth=<default>);
 coord[] copy(coord[] a, int depth=<default>);
-coord[] copy(coord[] a, int depth=<default>);
+object[] copy(object[] a, int depth=<default>);
 picture[] copy(picture[] a, int depth=<default>);
-marker[] copy(marker[] a, int depth=<default>);
 Legend[] copy(Legend[] a, int depth=<default>);
-Label[] copy(Label[] a, int depth=<default>);
 pair[][] copy(pair[][] a, int depth=<default>);
 real[] abs(pair[] a);
 real[] abs(triple[] a);
@@ -1535,15 +1537,15 @@
 triple operator *(real x, triple v);
 triple operator *(triple v, real x);
 path3 operator *(real[][] t, path3 g);
-Label operator *(transform t, Label L);
+side operator *(real x, side s);
+Label operator *(real[][] t, Label L);
 picture operator *(transform t, picture orig);
 bounds operator *(transform t, bounds b);
 path[] operator *(transform t, explicit path[] p);
+object operator *(transform t, explicit object F);
 pair[] operator *(transform t, pair[] z);
-Label operator *(real[][] t, Label L);
+Label operator *(transform t, Label L);
 picture operator *(real[][] t, picture orig);
-side operator *(real x, side s);
-object operator *(transform t, explicit object F);
 real latitude(triple v, bool warn=<default>);
 int sum(int[] a);
 real sum(real[] a);
@@ -1622,13 +1624,13 @@
 void write(file file=<default>, string s=<default>, pen[] p);
 void write(void suffix(file)=<default>);
 void write(file file, string s=<default>, explicit path[] x, void suffix(file)=<default>);
-void write(file file=<default>, align align, void suffix(file)=<default>);
+void write(file file=<default>, Label L, void suffix(file)=<default>);
 void write(pairOrTriple a);
 void write(file file, string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
 void write(string s=<default>, bool3 b, void suffix(file)=<default>);
 void write(file file, string s=<default>, bool3 b, void suffix(file)=<default>);
 void write(string s=<default>, explicit guide[] x, void suffix(file)=<default>);
-void write(file file=<default>, Label L, void suffix(file)=<default>);
+void write(file file=<default>, align align, void suffix(file)=<default>);
 bool operator !=(bool a, bool b);
 bool[] operator !=(bool a, bool[] b);
 bool[] operator !=(bool[] a, bool b);
@@ -1667,40 +1669,40 @@
 bool operator !=(path3 a, path3 b);
 bool operator !=(bool3 a, bool3 b);
 bool operator !=(autoscaleT a, autoscaleT b);
+bool operator !=(position a, position b);
+bool operator !=(arrowhead a, arrowhead b);
+bool operator !=(coords2 a, coords2 b);
 bool operator !=(scaling a, scaling b);
-bool operator !=(scaling a, scaling b);
 bool operator !=(bounds a, bounds b);
 bool operator !=(light a, light b);
 bool operator !=(pairOrTriple a, pairOrTriple b);
-bool operator !=(filltype a, filltype b);
+bool operator !=(marginT a, marginT b);
 bool operator !=(coords3 a, coords3 b);
+bool operator !=(align a, align b);
+bool operator !=(coord a, coord b);
+bool operator !=(ScaleT a, ScaleT b);
 bool operator !=(Label a, Label b);
 bool operator !=(processtime a, processtime b);
-bool operator !=(ScaleT a, ScaleT b);
-bool operator !=(align a, align b);
-bool operator !=(indexedTransform a, indexedTransform b);
-bool operator !=(hsv a, hsv b);
+bool operator !=(slice a, slice b);
 bool operator !=(coords2 a, coords2 b);
-bool operator !=(coords2 a, coords2 b);
 bool operator !=(transformation a, transformation b);
 bool operator !=(picture a, picture b);
-bool operator !=(marker a, marker b);
+bool operator !=(indexedTransform a, indexedTransform b);
 bool operator !=(bool3 a, bool b);
-bool operator !=(marginT a, marginT b);
+bool operator !=(hsv a, hsv b);
 bool operator !=(scaleT a, scaleT b);
+bool operator !=(side a, side b);
+bool operator !=(marker a, marker b);
+bool operator !=(scaling a, scaling b);
+bool operator !=(coord a, coord b);
+bool operator !=(Legend a, Legend b);
 bool operator !=(object a, object b);
 bool operator !=(cputime a, cputime b);
-bool operator !=(coord a, coord b);
-bool operator !=(coord a, coord b);
-bool operator !=(Legend a, Legend b);
-bool operator !=(side a, side b);
-bool operator !=(framedTransformStack a, framedTransformStack b);
 bool operator !=(bool a, bool3 b);
-bool operator !=(slice a, slice b);
+bool operator !=(filltype a, filltype b);
 bool operator !=(freezableBounds a, freezableBounds b);
 bool operator !=(projection a, projection b);
-bool operator !=(position a, position b);
-bool operator !=(arrowhead a, arrowhead b);
+bool operator !=(framedTransformStack a, framedTransformStack b);
 bool operator ==(bool a, bool b);
 bool[] operator ==(bool a, bool[] b);
 bool[] operator ==(bool[] a, bool b);
@@ -1739,40 +1741,40 @@
 bool operator ==(path3 a, path3 b);
 bool operator ==(bool3 a, bool3 b);
 bool operator ==(autoscaleT a, autoscaleT b);
+bool operator ==(position a, position b);
+bool operator ==(arrowhead a, arrowhead b);
+bool operator ==(coords2 a, coords2 b);
 bool operator ==(scaling a, scaling b);
-bool operator ==(scaling a, scaling b);
 bool operator ==(bounds a, bounds b);
 bool operator ==(light a, light b);
 bool operator ==(pairOrTriple a, pairOrTriple b);
-bool operator ==(filltype a, filltype b);
+bool operator ==(marginT a, marginT b);
 bool operator ==(coords3 a, coords3 b);
+bool operator ==(align a, align b);
+bool operator ==(coord a, coord b);
+bool operator ==(ScaleT a, ScaleT b);
 bool operator ==(Label a, Label b);
 bool operator ==(processtime a, processtime b);
-bool operator ==(ScaleT a, ScaleT b);
-bool operator ==(align a, align b);
-bool operator ==(indexedTransform a, indexedTransform b);
-bool operator ==(hsv a, hsv b);
+bool operator ==(slice a, slice b);
 bool operator ==(coords2 a, coords2 b);
-bool operator ==(coords2 a, coords2 b);
 bool operator ==(transformation a, transformation b);
 bool operator ==(picture a, picture b);
-bool operator ==(marker a, marker b);
+bool operator ==(indexedTransform a, indexedTransform b);
 bool operator ==(bool3 a, bool b);
-bool operator ==(marginT a, marginT b);
+bool operator ==(hsv a, hsv b);
 bool operator ==(scaleT a, scaleT b);
+bool operator ==(side a, side b);
+bool operator ==(marker a, marker b);
+bool operator ==(scaling a, scaling b);
+bool operator ==(coord a, coord b);
+bool operator ==(Legend a, Legend b);
 bool operator ==(object a, object b);
 bool operator ==(cputime a, cputime b);
-bool operator ==(coord a, coord b);
-bool operator ==(coord a, coord b);
-bool operator ==(Legend a, Legend b);
-bool operator ==(side a, side b);
-bool operator ==(framedTransformStack a, framedTransformStack b);
 bool operator ==(bool a, bool3 b);
-bool operator ==(slice a, slice b);
+bool operator ==(filltype a, filltype b);
 bool operator ==(freezableBounds a, freezableBounds b);
 bool operator ==(projection a, projection b);
-bool operator ==(position a, position b);
-bool operator ==(arrowhead a, arrowhead b);
+bool operator ==(framedTransformStack a, framedTransformStack b);
 bool operator ^(bool a, bool b);
 bool[] operator ^(bool a, bool[] b);
 bool[] operator ^(bool[] a, bool b);
@@ -1842,9 +1844,10 @@
 pen operator +(pen a, pen b);
 transform operator +(transform a, transform b);
 pen operator +(pen p, real w);
+marginT operator +(path, pen)(marginT ma(path, pen), marginT mb(path, pen));
 pen[] operator +(pen a, pen[] b);
 pen operator +(real w, pen p);
-marginT operator +(path, pen)(marginT ma(path, pen), marginT mb(path, pen));
+string operator +(... string[] a);
 pen[] operator +(pen[] a, pen b);
 real operator cast(int);
 pair operator cast(int);
@@ -1890,30 +1893,30 @@
 guide[] operator cast(path[] g);
 pair operator cast(pairOrTriple a);
 triple operator cast(pairOrTriple a);
-hsv operator cast(pen p);
+position operator cast(real x);
+Label operator cast(string s);
+frame operator cast(object F);
 bool3[] operator cast(bool[] b);
-align operator cast(pair dir);
-object operator cast(Label L);
-Label operator cast(object F);
-position operator cast(int x);
-object operator cast(string s);
+align operator cast(side side);
+position operator cast(pair x);
 guide[] operator cast(pair[] z);
-align operator cast(triple dir);
 path[] operator cast(guide[] g);
 bool operator cast(bool3 b);
-position operator cast(real x);
-Label operator cast(string s);
+pair operator cast(position P);
+object operator cast(frame f);
 path[] operator cast(guide g);
-align operator cast(side side);
-frame operator cast(object F);
+object operator cast(Label L);
+Label operator cast(object F);
+pen operator cast(hsv hsv);
+align operator cast(pair dir);
 path[] operator cast(pair[] z);
 path[] operator cast(path p);
 bool[] operator cast(bool3[] b);
-position operator cast(pair x);
-pair operator cast(position P);
+hsv operator cast(pen p);
+align operator cast(triple dir);
 bool3 operator cast(bool b);
-object operator cast(frame f);
-pen operator cast(hsv hsv);
+position operator cast(int x);
+object operator cast(string s);
 pen deepred;
 bool error(file f);
 string operator ecast(int);
@@ -1941,107 +1944,105 @@
 pen operator init();
 frame operator init();
 file operator init();
+hsv operator init();
+scaleT operator init();
+side operator init();
+marker operator init();
 marginT operator init();
-scaleT operator init();
-object operator init();
-cputime operator init();
+coords3 operator init();
+align operator init();
 filltype operator init();
-coords3 operator init();
-Label operator init();
-processtime operator init();
+projection operator init();
+framedTransformStack operator init();
 slice operator init();
-projection operator init();
-position operator init();
-arrowhead operator init();
-hsv operator init();
 coords2 operator init();
-coords2 operator init();
 transformation operator init();
 picture operator init();
-marker operator init();
+indexedTransform operator init();
+coords2 operator init();
 scaling operator init();
-scaling operator init();
 bounds operator init();
 light operator init();
 pairOrTriple operator init();
+scaling operator init();
 coord operator init();
+Legend operator init();
+object operator init();
+cputime operator init();
 coord operator init();
-Legend operator init();
-side operator init();
-framedTransformStack operator init();
 ScaleT operator init();
-align operator init();
-indexedTransform operator init();
+Label operator init();
+processtime operator init();
 bool3 operator init();
 autoscaleT operator init();
+position operator init();
+arrowhead operator init();
 sCAD operator init();
-frame BBox(frame)(real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>);
+frame NoBox(frame f);
 real animationdelay;
-frame NoBox(frame f);
 animation operator init();
+frame BBox(frame)(real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>);
 void annotate(picture pic=<default>, string title, string text, pair position);
 void babel(string s);
 path[] bezulate(path[] p);
-path subdivide(path p);
+bool checkSegment(path g, pair p, pair q);
 void connect(path[] paths, path[] result, path[] patch);
 path uncycle(path p, real t);
-bool isDuplicate(pair a, pair b, real relSize);
-path[][] containmentTree(path[] paths);
+path section(path p, real t1, real t2, bool loop=<default>);
 int countIntersections(path[] p, pair start, pair end);
 real[][] intersections(pair a, pair b, path p);
 real maxrefinements;
+real duplicateFuzz;
+path subdivide(path p);
+path[][] containmentTree(path[] paths);
+bool isDuplicate(pair a, pair b, real relSize);
 real fuzz;
 path removeDuplicates(path p);
-real duplicateFuzz;
-bool checkSegment(path g, pair p, pair q);
-path section(path p, real t1, real t2, bool loop=<default>);
+binarytree binarytree(... key[] keys);
 key nil;
+key key(int n, bool active=<default>);
+real minDistDefault;
+real nodeMarginDefault;
 binarytreeNode binarytreeNode(int key);
-binarytree searchtree(... int[] keys);
-binarytree binarytree(... key[] keys);
-key key(int n, bool active=<default>);
 object draw(picture pic=<default>, binarytreeNode node, pair pos, int height, real minDist, real levelDist, real nodeDiameter, pen p=<default>, bool condensed=<default>);
 void draw(picture pic=<default>, binarytree tree, real minDist=<default>, real nodeMargin=<default>, pen p=<default>, bool condensed=<default>);
-real minDistDefault;
 binarytreeNode operator init();
 key operator init();
 binarytree operator init();
-real nodeMarginDefault;
 key operator cast(int n);
 int operator cast(key k);
 int[] operator cast(key[] k);
-line intersection(face a, face b);
-splitface split(face a, face cut, projection P);
+binarytree searchtree(... int[] keys);
+real epsilon;
 void add(picture pic=<default>, face[] faces, projection P=<default>);
-real epsilon;
+picture operator cast(face f);
+face operator cast(path3 p);
 face operator init();
 line operator init();
 half operator init();
 splitface operator init();
 bsp operator init();
-picture operator cast(face f);
-face operator cast(path3 p);
+line intersection(face a, face b);
+splitface split(face a, face cut, projection P);
 void addseg(pair[][] gds, segment seg);
 pen[] extend(pen[] palette, pen below, pen above);
 guide[][] connect(pair[][][] points, real[] c, guide join(... guide[]));
 void collect(pair[][][] points, real[] c);
+segment case3(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=<default>);
 segment case1(pair p0, pair p1, int edge);
 real eps;
-segment case3(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=<default>);
-void fill(picture pic=<default>, guide[][] g, pen[][] palette);
-pen[][] interior(picture pic=<default>, guide[][] g, pen[] palette);
-void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen[] p);
-void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen p=<default>);
+segment checktriangle(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=<default>);
 guide[][] contour(pair[][] z, real[][] f, real[][] midpoint=<default>, real[] c, guide join(... guide[])=<default>);
 guide[][] contour(real[][] f, real[][] midpoint=<default>, pair a, pair b, real[] c, guide join(... guide[])=<default>);
 guide[][] contour(real f(real, real), pair a, pair b, real[] c, int nx=<default>, int ny=<default>, guide join(... guide[])=<default>);
 guide[][] contour(real f(pair), pair a, pair b, real[] c, int nx=<default>, int ny=<default>, guide join(... guide[])=<default>);
 guide[][] contour(pair[] z, real[] f, real[] c, guide join(... guide[])=<default>);
+segment case2(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge);
 segment operator init();
-segment checktriangle(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=<default>);
-segment case2(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge);
-surface surface(vertex[][] g);
-real eps;
+void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen[] p);
+void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen p=<default>);
+pen[][] interior(picture pic=<default>, guide[][] g, pen[] palette);
+void fill(picture pic=<default>, guide[][] g, pen[][] palette);
 vertex[][] contour3(triple[][][] v, real[][][] f, real[][][] midpoint=<default>, projection P=<default>);
 vertex[][] contour3(real[][][] f, real[][][] midpoint=<default>, triple a, triple b, projection P=<default>);
 vertex[][] contour3(real f(real, real, real), triple a, triple b, int nx=<default>, int ny=<default>, int nz=<default>, projection P=<default>);
@@ -2049,420 +2050,141 @@
 bucket operator init();
 vertex operator init();
 object operator init();
-void drawAll(TreeNode node, frame f);
-real layout(int level, TreeNode node);
+surface surface(vertex[][] g);
+real eps;
+real treeLevelStep;
 real treeMinNodeWidth;
 real treeNodeStep;
-void add(TreeNode child, TreeNode parent);
-void draw(TreeNode root, pair pos);
-real treeLevelStep;
 TreeNode makeNode(TreeNode parent=<default>, frame f);
 TreeNode makeNode(TreeNode parent=<default>, Label label);
 TreeNode operator init();
+void add(TreeNode child, TreeNode parent);
+void draw(TreeNode root, pair pos);
+void drawAll(TreeNode node, frame f);
+real layout(int level, TreeNode node);
 string link(string label, string text=<default>);
 string embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>);
 string embedplayer(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>);
+string link(string label, string text=<default>);
+string hyperlink(string url, string text);
 string embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>, string image=<default>);
-string hyperlink(string url, string text);
-string link(string label, string text=<default>);
-void texshipout(string stem, picture pic=<default>, bool xalign=<default>);
-bool XYAlign;
-void fmdefaults();
 void drawMomArrow(picture pic=<default>, path p, align align, position pos=<default>, real offset=<default>, real length=<default>, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real margin=<default>);
-void drawVertexX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
+void drawVertexOX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
+void drawVertexBoxO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
 void drawVertexBox(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
 void drawVertexTriangle(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
 void drawVertex(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
+void drawDoubleLine(picture pic=<default>, path p, pen fgpen=<default>, real dlspacing=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
 void drawGhost(picture pic=<default>, path p, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
-void drawScalar(picture pic=<default>, path p, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
-void drawFermion(picture pic=<default>, path p, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
-void drawPhoton(picture pic=<default>, path p, real amp=<default>, real width=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
-path momArrowPath(path p, align align, position pos, real offset=<default>, real length=<default>);
-path photon(path p, real amp=<default>, real width=<default>);
-path gluon(path p, real amp=<default>, real width=<default>);
-void do_overpaint(picture pic, path p, pen bgpen, real halfwidth, real vertexangle);
-bool appendsuffix;
-real momarrowsize(pen p=<default>);
-real momarrowfactor;
 real momarrowmargin;
 real momarrowoffset;
 pen momarrowpen;
-real momarrowlength;
-real bigvertexsize;
+bool currentmomarrow(picture, path, pen, marginT(path, pen));
+real vertexsize;
+real minvertexangle;
 real linemargin;
+bool overpaint;
 bool currentarrow(picture, path, pen, marginT(path, pen));
-pen vertexpen;
-pen ghostpen;
-pen scalarpen;
+real doublelinespacing;
+pen doublelinepen;
+real photonamplitude;
+real gluonamplitude;
+real photonratio;
+pen gluonpen;
 pen fermionpen;
-real photonratio;
-real gluonratio;
-bool YAlign;
+real momarrowsize(pen p=<default>);
+void drawVertexX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>);
+real momarrowfactor;
 void drawVertexO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
+void fmdefaults();
+void texshipout(string stem, picture pic=<default>, bool xalign=<default>);
 void drawVertexTriangleO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
-void drawVertexOX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
-void drawDoubleLine(picture pic=<default>, path p, pen fgpen=<default>, real dlspacing=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
-bool currentmomarrow(picture, path, pen, marginT(path, pen));
-bool overpaint;
-real minvertexangle;
+path photon(path p, real amp=<default>, real width=<default>);
+real momarrowlength;
+path gluon(path p, real amp=<default>, real width=<default>);
+bool XYAlign;
+bool YAlign;
+void drawFermion(picture pic=<default>, path p, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
+void drawPhoton(picture pic=<default>, path p, real amp=<default>, real width=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
+bool appendsuffix;
+pen vertexpen;
+real gluonratio;
+void drawGluon(picture pic=<default>, path p, real amp=<default>, real width=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
+path momArrowPath(path p, align align, position pos, real offset=<default>, real length=<default>);
 pen backgroundpen;
-pen doublelinepen;
+pen ghostpen;
+void do_overpaint(picture pic, path p, pen bgpen, real halfwidth, real vertexangle);
+pen scalarpen;
 void drawVertexBoxX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
-real gluonamplitude;
-pen gluonpen;
+real bigvertexsize;
+void drawScalar(picture pic=<default>, path p, pen fgpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
+string includegraphicscommand;
 pen photonpen;
-real photonamplitude;
-real doublelinespacing;
-real vertexsize;
-void drawVertexBoxO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
 pen bigvertexpen;
-string includegraphicscommand;
-void drawGluon(picture pic=<default>, path p, real amp=<default>, real width=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
 Dir Down;
-Dir Up;
-path path(pair[] point ... flowdir[] dir);
+Dir Left;
 block bevel(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real dh=<default>, real dw=<default>, real minwidth=<default>, real minheight=<default>);
 block roundrectangle(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real ds=<default>, real dw=<default>, real minwidth=<default>, real minheight=<default>);
 block diamond(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real ds=<default>, real dw=<default>, real height=<default>, real minwidth=<default>, real minheight=<default>);
-block rectangle(object header, object body, pair center=<default>, pen headerpen=<default>, pen bodypen=<default>, pen drawpen=<default>, real dx=<default>, real minheaderwidth=<default>, real minheaderheight=<default>, real minbodywidth=<default>, real minbodyheight=<default>);
-block rectangle(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real dx=<default>, real minwidth=<default>, real minheight=<default>);
-real defaultexcursion;
+real mincirclediameter;
 real minblockheight;
-flowdir Vertical;
+Dir Up;
 Dir Right;
 real minblockwidth;
-flowdir Horizontal;
-real mincirclediameter;
-block blockconnector(block, block)(picture pic, transform t, pen p=<default>, marginT margin(path, pen)=<default>);
-Dir Left;
+block circle(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real dr=<default>, real mindiameter=<default>);
 block operator --(block b1, Label label);
 block operator --(block b1, Dir dir);
 block operator --(block b, bool arrowbar(picture, path, pen, marginT(path, pen)));
-void draw(picture pic=<default>, block block, pen p=<default>);
+block rectangle(object header, object body, pair center=<default>, pen headerpen=<default>, pen bodypen=<default>, pen drawpen=<default>, real dx=<default>, real minheaderwidth=<default>, real minheaderheight=<default>, real minbodywidth=<default>, real minbodyheight=<default>);
+block rectangle(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real dx=<default>, real minwidth=<default>, real minheight=<default>);
 flowdir operator init();
 block operator init();
 Dir operator init();
+flowdir Vertical;
+path path(pair[] point ... flowdir[] dir);
+void draw(picture pic=<default>, block block, pen p=<default>);
+block blockconnector(block, block)(picture pic, transform t, pen p=<default>, marginT margin(path, pen)=<default>);
 block parallelogram(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real dx=<default>, real slope=<default>, real minwidth=<default>, real minheight=<default>);
-block circle(object body, pair center=<default>, pen fillpen=<default>, pen drawpen=<default>, real dr=<default>, real mindiameter=<default>);
-path compassmark(pair O, pair A, real position, real angle=<default>);
-arc arcsubtended(point A, point B, real angle);
+flowdir Horizontal;
+real defaultexcursion;
+arc arccircle(point A, point M, point B);
+arc arccircle(point A, point B, real angle, bool direction=<default>);
 void lineinversion();
 line radicalline(circle c1, circle c2);
+point radicalcenter(circle c1, circle c2);
+point radicalcenter(circle c1, circle c2, circle c3);
 point inverse(real k, point A, point M);
 circle inverse(real k, point A, line l);
 circle inverse(real k, point A, circle c);
 arc inverse(real k, point A, segment s);
 triangle anticomplementary(triangle t);
-triangle incentral(triangle t);
+triangle symmedial(triangle t);
+triangle orthic(triangle t);
+triangle medial(triangle t);
+point intouch(side side);
+triangle intouch(triangle t);
 triangle extouch(triangle t);
 triangle extouch(side side);
+triangle pedal(triangle t, point M);
+line pedal(side side, point M);
+point isogonal(side side, point M);
+line isogonal(vertex V, point M);
+triangle isogonal(triangle t, point M);
+point isogonalconjugate(triangle t, point M);
 point isotomicconjugate(triangle t, point M);
 point[] fermat(triangle t);
-point gergonne(triangle t);
 triangle cevian(triangle t, point P);
 point cevian(side side, point P);
 line cevian(vertex V, point P);
-line altitude(vertex V);
-line altitude(side side);
-point foot(vertex V);
-point foot(side side);
-triangle triangleabc(real a, real b, real c, real angle=<default>, point A=<default>);
-side opposite(vertex V);
-vertex opposite(side side);
-circle excircle(point A, point B, point C);
-circle excircle(side side);
-void markarc(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, arc a, pen sectorpen=<default>, pen markpen=<default>, marginT margin(path, pen)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marker marker=<default>);
-point ppoint(arc a, real x);
-int arcnodesnumber(explicit arc a);
-path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)(conic co);
-point curpoint(line l, real x);
-point curpoint(explicit circle c, real x);
-point curpoint(explicit ellipse el, real x);
-point curpoint(explicit parabola p, real x);
-point curpoint(conic co, real x);
-point curpoint(arc a, real x);
-abscissa relabscissa(real x);
-abscissa relabscissa(int x);
-abscissa relabscissa(line l, point M);
-abscissa relabscissa(circle c, point M);
-abscissa relabscissa(ellipse el, point M);
-abscissa relabscissa(conic co, point M);
-abscissa relabscissa(arc a, point M);
-int angularsystem;
-real arclength(circle c);
-real arclength(ellipse el);
-real arclength(ellipse el, real angle1, real angle2, bool direction=<default>, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-real arclength(parabola p, real angle);
-real arclength(parabola p, real angle1, real angle2);
-real arclength(parabola p);
-real arclength(arc a);
-string conictype(bqe bqe);
-point circumcenter(point A, point B, point C);
-point circumcenter(triangle t);
-parabola parabola(point F, line l);
-parabola parabola(point F, point vertex);
-parabola parabola(point F, real a, real angle);
-parabola parabola(bqe bqe);
-parabola parabola(point M1, point M2, point M3, line l);
-parabola parabola(point M1, point M2, point M3, point M4, point M5);
-point angpoint(conic co, real angle);
-point angpoint(explicit circle c, real x);
-point angpoint(explicit ellipse el, real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-point angpoint(explicit parabola p, real x);
-point angpoint(explicit hyperbola h, real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-point angpoint(arc a, real angle);
-path currentpolarconicroutine(conic co, real angle1, real angle2, int n, bool direction);
-int hyperbolanodesnumber(hyperbola h, real angle1, real angle2);
-int hyperbolanodesnumberfactor;
-int parabolanodesnumber(parabola p, real angle1, real angle2);
-int ellipsenodesnumberfactor;
-int circlenodesnumber(real r);
-int circlenodesnumber(real r, real angle1, real angle2);
-conic conic(point F, line l, real e);
-conic conic(point M1, point M2, point M3, point M4, point M5);
-conic conic(bqe bqe);
-bool degenerate(conic c);
-bool degenerate(circle c);
-bool degenerate(ellipse el);
-real[] realquarticroots(real a, real b, real c, real d, real e);
-path arcfromfocus(conic co, real angle1, real angle2, int n=<default>, bool direction=<default>);
-line sector(int n=<default>, int p=<default>, line l1, line l2, real angle=<default>, bool sharp=<default>);
-line bisector(line l1, line l2, real angle=<default>, bool sharp=<default>);
-line bisector(point A, point B, point C, point D, real angle=<default>, bool sharp=<default>);
-line bisector(segment s, real angle=<default>);
-line bisector(point A, point B, real angle=<default>);
-line bisector(vertex V, real angle=<default>);
-line bisector(side side);
-real sharpangle(line l1, line l2);
-line perpendicular(point M, line l);
-line perpendicular(point M, explicit vector normal);
-line perpendicular(point M, explicit pair normal);
-bool perpendicular(line l1, line l2);
-void perpendicular(picture pic=<default>, pair z, pair align, pair dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicular(picture pic=<default>, pair z, pair align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-transform vprojection(line l, bool safe=<default>);
-bool concurrent(... line[] l);
-line parallel(point M, line l);
-line parallel(point M, explicit vector dir);
-line parallel(point M, explicit pair dir);
-bool parallel(line l1, line l2, bool strictly=<default>);
-transform reflect(line l);
-transform reflect(line l1, line l2, bool safe=<default>);
-line Ox(coordsys R=<default>);
-line Ox;
-line extend(line l);
-line line(point A, bool extendA=<default>, point B, bool extendB=<default>);
-line line(segment s);
-line line(real a, point A=<default>);
-line line(point A=<default>, real a);
-line line(int a, point A=<default>);
-line line(coordsys R=<default>, real slope, real origin);
-line line(coordsys R=<default>, real a, real b, real c);
-line line(circle c);
-line line(explicit side side);
-pair attract(pair m, path g, real fuzz=<default>);
-point attract(point M, path g, real fuzz=<default>);
-bool simeq(point A, point B, real fuzz=<default>);
-bool simeq(point a, real b, real fuzz=<default>);
-void clipdraw(picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, real xmargin=<default>, real ymargin=<default>, Label legend=<default>, marker marker=<default>);
-void Drawline(picture pic=<default>, Label L=<default>, pair P, bool dirP=<default>, pair Q, bool dirQ=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
-path NoModifier(path);
-bool between(point M, point O, point N);
-int sgnd(real x);
-int sgnd(int x);
-pen addpenline;
-pen addpenline(pen p);
-real linemargin;
-real linemargin();
-point origin;
-point origin(coordsys R=<default>);
-vector unit(point M);
-vector unit(vector u);
-bool collinear(vector u, vector v);
-vector vector(coordsys R=<default>, pair v);
-vector vector(point M);
-transform scaleO(real x);
-transform yscale(real k, point M);
-point conj(explicit point M);
-vector conj(explicit vector u);
-hyperbola conj(hyperbola h);
-real length(explicit point M);
-real length(segment s);
-real abs(coordsys R, pair m);
-real abs(explicit point M);
-pair locate(point P);
-point locate(pair p);
-pair locate(explicit vector v);
-bool samecoordsys(bool warn=<default> ... point[] M);
-bool samecoordsys(bool warn=<default> ... bqe[] bqes);
-pair coordinates(point M);
-point changecoordsys(coordsys R, point M);
-vector changecoordsys(coordsys R, vector v);
-line changecoordsys(coordsys R, line l);
-bqe changecoordsys(coordsys R, bqe bqe);
-conic changecoordsys(coordsys R, conic co);
-coordsys currentcoordsys;
-pair operator /(pair p, coordsys R);
-point operator /(explicit point P, real x);
-point operator /(real x, explicit point P);
-vector operator /(explicit vector v, real x);
-line operator /(line l, real x);
-line operator /(line l, int x);
-circle operator /(explicit circle c, real x);
-circle operator /(explicit circle c, int x);
-ellipse operator /(ellipse el, real x);
-abscissa operator /(real x, explicit abscissa a);
-abscissa operator /(explicit abscissa a, real x);
-abscissa operator /(int x, explicit abscissa a);
-arc operator /(explicit arc a, real x);
-mass operator /(explicit mass M, real x);
-mass operator /(explicit mass M, int x);
-void show(picture pic=<default>, Label lo=<default>, Label li=<default>, Label lj=<default>, coordsys R, pen dotpen=<default>, pen xpen=<default>, pen ypen=<default>, pen ipen=<default>, pen jpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
-void show(Label L, vector v, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
-void show(picture pic=<default>, line l, pen p=<default>);
-void show(picture pic=<default>, Label LA=<default>, Label LB=<default>, Label LC=<default>, Label La=<default>, Label Lb=<default>, Label Lc=<default>, triangle t, pen p=<default>, filltype filltype=<default>);
-coordsys cartesiansystem(pair O=<default>, pair i, pair j);
-real binomial(real n, real k);
-real approximate(real t);
-real[] approximate(real[] T);
-real epsgeo;
-transform rotate(explicit pair dir);
-transform rotate(explicit vector dir);
-transform rotate(explicit point dir);
-bool isparabola(bqe bqe);
-real sharpdegrees(line l1, line l2);
-void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit pair align=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
-void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit vector align, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
-real exradius(point A, point B, point C);
-real exradius(side side);
-triangle orthic(triangle t);
-path square(pair z1, pair z2);
-line Oy(coordsys R=<default>);
-line Oy;
-inversion inversion(real k, point C);
-inversion inversion(point C, real k);
-inversion inversion(circle c1, circle c2, real sgn=<default>);
-inversion inversion(circle c1, circle c2, circle c3);
-inversion inversion(circle c);
-void drawline(picture pic=<default>, triangle t, pen p=<default>);
-real operator ^(point M, explicit circle c);
-segment segment(point A, point B);
-segment segment(line l);
-segment segment(explicit side side);
-path fromCenter(conic co, real angle1, real angle2, int n, bool direction);
-circle circumcircle(point A, point B, point C);
-circle circumcircle(triangle t);
-triangle symmedial(triangle t);
-int curvilinearsystem;
-bqe bqe(coordsys R=<default>, real a, real b, real c, real d, real e, real f);
-bqe bqe(point M1, point M2, point M3, point M4, point M5);
-real focusToCenter(ellipse el, real a);
-point radicalcenter(circle c1, circle c2);
-point radicalcenter(circle c1, circle c2, circle c3);
 point symmedian(triangle t);
 point symmedian(side side);
 line symmedian(vertex V);
-string defaultmassformat;
-real angle(explicit point M, coordsys R=<default>, bool warn=<default>);
-real angle(explicit vector v, coordsys R=<default>, bool warn=<default>);
-real angle(line l, coordsys R=<default>);
-real angle(line l1, line l2);
-real angle(arc a);
-real degrees(explicit point M, coordsys R=<default>, bool warn=<default>);
-real degrees(vector v, coordsys R=<default>, bool warn=<default>);
-real degrees(line l, coordsys R=<default>);
-real degrees(line l1, line l2);
-real degrees(arc a);
+transform projection(point A, point B);
+transform projection(point A, point B, point C, point D, bool safe=<default>);
+transform projection(line l);
+transform projection(line l1, line l2, bool safe=<default>);
+real EPS;
 bqe canonical(bqe bqe);
-point arcsubtendedcenter(point A, point B, real angle);
-transform rotateO(real a);
-point centroid(point A, point B, point C);
-point centroid(triangle t);
-coordsys coordsys(line l);
-coordsys coordsys(conic co);
-coordsys coordsys(ellipse el);
-void markrightangle(picture pic=<default>, point A, point O, point B, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-line complementary(explicit line l);
-line[] complementary(explicit segment s);
-arc complementary(arc a);
-triangle triangle(line l1, line l2, line l3);
-int nodesystem;
-bool byvertices;
-transform scale(real k, point M);
-transform scale(real k, point A, point B, point C, point D, bool safe=<default>);
-transform scale(real k, line l1, line l2, bool safe=<default>);
-point operator -(explicit point P);
-point operator -(explicit point P1, explicit point P2);
-point operator -(explicit point P1, explicit pair p2);
-point operator -(explicit pair p1, explicit point P2);
-point operator -(point M, explicit vector v);
-vector operator -(explicit vector v);
-point operator -(explicit pair m, explicit vector v);
-vector operator -(explicit vector v1, explicit vector v2);
-line operator -(line l, vector u);
-conic operator -(conic c, explicit point M);
-conic operator -(conic c, explicit pair m);
-conic operator -(conic c, vector v);
-circle operator -(explicit circle c, explicit point M);
-circle operator -(explicit circle c, pair m);
-circle operator -(explicit circle c, vector m);
-abscissa operator -(explicit abscissa a);
-abscissa operator -(real x, explicit abscissa a);
-abscissa operator -(explicit abscissa a, real x);
-abscissa operator -(int x, explicit abscissa a);
-arc operator -(explicit arc a, point M);
-arc operator -(explicit arc a, vector v);
-mass operator -(mass M1, mass M2);
-mass operator -(explicit mass M, real x);
-mass operator -(explicit mass M, int x);
-real inradius(point A, point B, point C);
-real inradius(triangle t);
-int conicnodesnumber(conic co, real angle1, real angle2, bool dir=<default>);
-int parabolanodesnumberfactor;
-arc arc(ellipse el, real angle1, real angle2, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>, bool direction=<default>);
-arc arc(ellipse el, explicit abscissa x1, explicit abscissa x2, bool direction=<default>);
-arc arc(ellipse el, point M, point N, bool direction=<default>);
-arc arc(explicit arc a, abscissa x1, abscissa x2);
-arc arc(explicit arc a, point M, point N);
-path arc(explicit pair B, explicit pair A, explicit pair C, real r);
-mass masscenter(... mass[] M);
-bool finite(explicit point p);
-bool defined(point P);
-int conicnodesfactor;
-coordsys canonicalcartesiansystem(ellipse el);
-coordsys canonicalcartesiansystem(parabola p);
-coordsys canonicalcartesiansystem(hyperbola h);
-coordsys canonicalcartesiansystem(explicit conic co);
-int ellipsenodesnumber(real a, real b);
-int ellipsenodesnumber(real a, real b, real angle1, real angle2, bool dir);
-bool sameside(point M, point N, point O);
-bool sameside(point M, point P, line l);
-point[] sameside(point M, line l1, line l2);
-void addMargins(picture pic=<default>, real lmargin=<default>, real bmargin=<default>, real rmargin=<default>, real tmargin=<default>, bool rigid=<default>, bool allObject=<default>);
-point intersectionpoint(line l1, line l2);
-line[] operator ^^(line l1, line l2);
-line[] operator ^^(line l1, line[] l2);
-line[] operator ^^(line[] l2, line l1);
-line[] operator ^^(line[] l1, line[] l2);
-triangle[] operator ^^(triangle[] t1, triangle t2);
-triangle[] operator ^^(... triangle[] t);
-point[] standardizecoordsys(coordsys R=<default>, bool warn=<default> ... point[] M);
-real EPS;
-abscissa angabscissa(real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-abscissa angabscissa(int x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-abscissa angabscissa(circle c, point M);
-abscissa angabscissa(ellipse el, point M, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-abscissa angabscissa(hyperbola h, point M, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
-abscissa angabscissa(parabola p, point M);
-abscissa angabscissa(explicit conic co, point M);
-abscissa angabscissa(arc a, point M);
-real perpfactor;
-void distance(picture pic=<default>, Label L=<default>, point A, point B, bool rotated=<default>, real offset=<default>, pen p=<default>, pen joinpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
-real distance(point M, line l);
-real distance(line l, point M);
-point midpoint(segment s);
-point midpoint(side side);
-transform xscaleO(real x);
 pair operator *(coordsys R, pair p);
 path operator *(coordsys R, path g);
 coordsys operator *(transform t, coordsys R);
@@ -2500,110 +2222,51 @@
 circle operator *(inversion i, circle c);
 arc operator *(inversion i, segment s);
 path operator *(inversion i, triangle t);
-point operator +(explicit point P1, explicit point P2);
-point operator +(explicit point P1, explicit pair p2);
-point operator +(explicit pair p1, explicit point p2);
-point operator +(point M, explicit vector v);
-point operator +(explicit pair m, explicit vector v);
-vector operator +(explicit vector v1, explicit vector v2);
-line operator +(line l, vector u);
-conic operator +(conic c, explicit point M);
-conic operator +(conic c, explicit pair m);
-conic operator +(conic c, vector v);
-circle operator +(explicit circle c, explicit point M);
-circle operator +(explicit circle c, pair m);
-circle operator +(explicit circle c, vector m);
-abscissa operator +(real x, explicit abscissa a);
-abscissa operator +(explicit abscissa a, real x);
-abscissa operator +(int x, explicit abscissa a);
-arc operator +(explicit arc a, point M);
-arc operator +(explicit arc a, vector v);
-mass operator +(mass M1, mass M2);
-mass operator +(explicit mass M, real x);
-mass operator +(explicit mass M, int x);
+abscissa angabscissa(real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+abscissa angabscissa(int x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+abscissa angabscissa(circle c, point M);
+abscissa angabscissa(ellipse el, point M, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+abscissa angabscissa(hyperbola h, point M, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+abscissa angabscissa(parabola p, point M);
+abscissa angabscissa(explicit conic co, point M);
+abscissa angabscissa(arc a, point M);
+point arcsubtendedcenter(point A, point B, real angle);
+inversion inversion(real k, point C);
+inversion inversion(point C, real k);
+inversion inversion(circle c1, circle c2, real sgn=<default>);
+inversion inversion(circle c1, circle c2, circle c3);
+inversion inversion(circle c);
+path compassmark(pair O, pair A, real position, real angle=<default>);
+path square(pair z1, pair z2);
+real[] bangles(picture pic=<default>, parabola p);
+real[][] bangles(picture pic=<default>, hyperbola h);
+vector vector(coordsys R=<default>, pair v);
+vector vector(point M);
+void clipdraw(picture pic=<default>, Label L=<default>, path g, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, real xmargin=<default>, real ymargin=<default>, Label legend=<default>, marker marker=<default>);
+line median(vertex V);
+line median(side side);
+real arclength(circle c);
+real arclength(ellipse el);
+real arclength(ellipse el, real angle1, real angle2, bool direction=<default>, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+real arclength(parabola p, real angle);
+real arclength(parabola p, real angle1, real angle2);
+real arclength(parabola p);
+real arclength(arc a);
+bool degenerate(conic c);
+bool degenerate(circle c);
+bool degenerate(ellipse el);
+void perpendicularmark(picture pic=<default>, point z, explicit pair align, explicit pair dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, point z, vector align, vector dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, point z, explicit pair align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, point z, vector align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, line l1, line l2, real size=<default>, pen p=<default>, int quarter=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void markrightangle(picture pic=<default>, point A, point O, point B, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+line sector(int n=<default>, int p=<default>, line l1, line l2, real angle=<default>, bool sharp=<default>);
+line hline(coordsys R=<default>);
+line hline;
 circle incircle(point A, point B, point C);
 circle incircle(triangle t);
-bool operator @(point m, line l);
-bool operator @(point M, conic co);
-bool operator @(point M, explicit circle c);
-bool operator @(point M, arc a);
-triangle triangleAbc(real alpha, real b, real c, real angle=<default>, point A=<default>);
-real elle(real phi, real k);
-trilinear trilinear(triangle t, real a, real b, real c);
-trilinear trilinear(triangle t, point M);
-trilinear trilinear(triangle t, real f(real, real, real), real a=<default>, real b=<default>, real c=<default>);
-point bisectorpoint(side side);
-line median(vertex V);
-line median(side side);
-abscissa curabscissa(real x);
-abscissa curabscissa(int x);
-abscissa curabscissa(line l, point M);
-abscissa curabscissa(circle c, point M);
-abscissa curabscissa(ellipse el, point M);
-abscissa curabscissa(parabola p, point M);
-abscissa curabscissa(conic co, point M);
-abscissa curabscissa(arc a, point M);
-void draw(picture pic=<default>, Label L=<default>, line l, bool dirA=<default>, bool dirB=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
-void draw(picture pic=<default>, Label[] L=<default>, line[] l, align align=<default>, pen[] p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label[] legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
-void draw(picture pic=<default>, Label[] L=<default>, line[] l, align align=<default>, pen p, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label[] legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
-void draw(picture pic=<default>, Label L=<default>, circle c, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(picture pic=<default>, Label L=<default>, ellipse el, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(picture pic=<default>, Label L=<default>, parabola parabola, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(picture pic=<default>, Label L=<default>, hyperbola h, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(picture pic=<default>, Label L=<default>, explicit conic co, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(picture pic=<default>, Label L=<default>, arc a, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
-void draw(picture pic=<default>, triangle t, pen p=<default>, marker marker=<default>);
-void draw(picture pic=<default>, triangle[] t, pen p=<default>, marker marker=<default>);
-pair[] intersectionpoints(pair A, pair B, real a, real b, real c, real d, real f, real g);
-pair[] intersectionpoints(pair A, pair B, real[] equation);
-point[] intersectionpoints(line l, path g);
-point[] intersectionpoints(bqe bqe1, bqe bqe2);
-point[] intersectionpoints(triangle t, line l, bool extended=<default>);
-point[] intersectionpoints(line l, triangle t, bool extended=<default>);
-point[] intersectionpoints(line l, circle c);
-point[] intersectionpoints(circle c, line l);
-point[] intersectionpoints(line l, ellipse el);
-point[] intersectionpoints(ellipse el, line l);
-point[] intersectionpoints(line l, parabola p);
-point[] intersectionpoints(parabola p, line l);
-point[] intersectionpoints(line l, hyperbola h);
-point[] intersectionpoints(hyperbola h, line l);
-point[] intersectionpoints(line l, conic co);
-point[] intersectionpoints(conic co, line l);
-point[] intersectionpoints(conic co1, conic co2);
-point[] intersectionpoints(triangle t, conic co, bool extended=<default>);
-point[] intersectionpoints(conic co, triangle t, bool extended=<default>);
-point[] intersectionpoints(ellipse a, ellipse b);
-point[] intersectionpoints(ellipse a, circle b);
-point[] intersectionpoints(circle a, ellipse b);
-point[] intersectionpoints(ellipse a, parabola b);
-point[] intersectionpoints(parabola a, ellipse b);
-point[] intersectionpoints(ellipse a, hyperbola b);
-point[] intersectionpoints(hyperbola a, ellipse b);
-point[] intersectionpoints(circle a, parabola b);
-point[] intersectionpoints(parabola a, circle b);
-point[] intersectionpoints(circle a, hyperbola b);
-point[] intersectionpoints(hyperbola a, circle b);
-point[] intersectionpoints(parabola a, parabola b);
-point[] intersectionpoints(parabola a, hyperbola b);
-point[] intersectionpoints(hyperbola a, parabola b);
-point[] intersectionpoints(hyperbola a, hyperbola b);
-point[] intersectionpoints(circle c1, circle c2);
-point[] intersectionpoints(conic co, arc a);
-point[] intersectionpoints(arc a, conic co);
-point[] intersectionpoints(arc a1, arc a2);
-point[] intersectionpoints(line l, arc a);
-point[] intersectionpoints(arc a, line l);
-arc arccircle(point A, point M, point B);
-arc arccircle(point A, point B, real angle, bool direction=<default>);
-point relpoint(line l, real x);
-point relpoint(explicit circle c, real x);
-point relpoint(explicit ellipse el, real x);
-point relpoint(explicit parabola p, real x);
-point relpoint(explicit hyperbola h, real x);
-point relpoint(explicit conic co, explicit real x);
-point relpoint(explicit conic co, explicit int x);
-point relpoint(arc a, real x);
+real binomial(real n, real k);
 point point(coordsys R, pair p, real m=<default>);
 point point(explicit pair p, real m);
 point point(coordsys R, explicit point M, real m=<default>);
@@ -2634,61 +2297,54 @@
 point point(trilinear tri);
 point point(circle c, point M);
 point point(circle c, explicit vector v);
-line reverse(line l);
-arc reverse(arc a);
-bool operator !=(explicit point M, explicit point N);
-bool operator !=(line l1, line l2);
-int[] numarray;
+point bisectorpoint(side side);
+transform scale(real k, point M);
+transform scale(real k, point A, point B, point C, point D, bool safe=<default>);
+transform scale(real k, line l1, line l2, bool safe=<default>);
+point angpoint(conic co, real angle);
+point angpoint(explicit circle c, real x);
+point angpoint(explicit ellipse el, real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+point angpoint(explicit parabola p, real x);
+point angpoint(explicit hyperbola h, real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
+point angpoint(arc a, real angle);
+string conictype(bqe bqe);
 bool operator ==(coordsys c1, coordsys c2);
 bool operator ==(explicit point M, explicit point N);
 bool operator ==(explicit vector u, explicit vector v);
 bool operator ==(line l1, line l2);
+mass masscenter(... mass[] M);
+triangle triangleAbc(real alpha, real b, real c, real angle=<default>, point A=<default>);
+bool operator !=(explicit point M, explicit point N);
+bool operator !=(line l1, line l2);
+arc arcsubtended(point A, point B, real angle);
+vector unit(point M);
+vector unit(vector u);
+transform reflect(line l);
+transform reflect(line l1, line l2, bool safe=<default>);
+real sharpdegrees(line l1, line l2);
+int ellipsenodesnumberfactor;
+real degrees(explicit point M, coordsys R=<default>, bool warn=<default>);
+real degrees(vector v, coordsys R=<default>, bool warn=<default>);
+real degrees(line l, coordsys R=<default>);
+real degrees(line l1, line l2);
+real degrees(arc a);
+point foot(vertex V);
+point foot(side side);
 point excenter(point A, point B, point C);
 point excenter(side side);
-mass mass(point M, real m);
-mass mass(explicit point P);
-mass mass(coordsys R, explicit pair p, real m);
-transform yscaleO(real x);
-coordsys operator init();
-point operator init();
-vector operator init();
-line operator init();
-segment operator init();
-bqe operator init();
-conic operator init();
-circle operator init();
-ellipse operator init();
-parabola operator init();
-hyperbola operator init();
-abscissa operator init();
-arc operator init();
-mass operator init();
-triangle operator init();
-trilinear operator init();
-inversion operator init();
-point isogonal(side side, point M);
-line isogonal(vertex V, point M);
-triangle isogonal(triangle t, point M);
-bqe equation(ellipse el);
-bqe equation(parabola p);
-bqe equation(hyperbola h);
-bqe equation(explicit conic co);
-void dot(picture pic=<default>, Label L, explicit point Z, align align=<default>, string format=<default>, pen p=<default>);
-real dot(point A, point B);
-real dot(point A, explicit pair B);
-real dot(explicit pair A, point B);
-void dot(picture pic=<default>, Label L, explicit mass M, align align=<default>, string format=<default>, pen p=<default>);
-void dot(picture pic=<default>, triangle t, pen p=<default>);
-triangle antipedal(triangle t, point M);
-line tangent(circle c, abscissa x);
-line tangent(circle c, point M);
-line tangent(circle c, explicit vector v);
-line tangent(ellipse el, abscissa x);
-line tangent(parabola p, abscissa x);
-line tangent(hyperbola h, abscissa x);
-line tangent(explicit arc a, abscissa x);
-line tangent(explicit arc a, point M);
-bool byfoci;
+triangle incentral(triangle t);
+point origin;
+point origin(coordsys R=<default>);
+string massformat(string format=<default>, string s, mass M);
+void write(explicit line l);
+void write(explicit segment s);
+void write(trilinear tri);
+line isotomic(vertex V, point M);
+point isotomic(side side, point M);
+triangle isotomic(triangle t, point M);
+transform hprojection(line l, bool safe=<default>);
+point midpoint(segment s);
+point midpoint(side side);
 pair operator cast(point P);
 pair[] operator cast(point[] P);
 point operator cast(pair p);
@@ -2734,69 +2390,151 @@
 point operator cast(trilinear tri);
 circle operator cast(inversion i);
 inversion operator cast(circle c);
-path arcfromcenter(ellipse el, real angle1, real angle2, bool direction=<default>, int n=<default>);
-path arcfromcenter(hyperbola h, real angle1, real angle2, int n=<default>, bool direction=<default>);
-path arcfromcenter(explicit conic co, real angle1, real angle2, int n, bool direction=<default>);
+point curpoint(line l, real x);
+point curpoint(explicit circle c, real x);
+point curpoint(explicit ellipse el, real x);
+point curpoint(explicit parabola p, real x);
+point curpoint(conic co, real x);
+point curpoint(arc a, real x);
+point relpoint(line l, real x);
+point relpoint(explicit circle c, real x);
+point relpoint(explicit ellipse el, real x);
+point relpoint(explicit parabola p, real x);
+point relpoint(explicit hyperbola h, real x);
+point relpoint(explicit conic co, explicit real x);
+point relpoint(explicit conic co, explicit int x);
+point relpoint(arc a, real x);
+bool collinear(vector u, vector v);
+bool between(point M, point O, point N);
+void draw(picture pic=<default>, Label L=<default>, line l, bool dirA=<default>, bool dirB=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
+void draw(picture pic=<default>, Label[] L=<default>, line[] l, align align=<default>, pen[] p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label[] legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
+void draw(picture pic=<default>, Label[] L=<default>, line[] l, align align=<default>, pen p, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label[] legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
+void draw(picture pic=<default>, Label L=<default>, circle c, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
+void draw(picture pic=<default>, Label L=<default>, ellipse el, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
+void draw(picture pic=<default>, Label L=<default>, parabola parabola, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
+void draw(picture pic=<default>, Label L=<default>, hyperbola h, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
+void draw(picture pic=<default>, Label L=<default>, explicit conic co, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
+void draw(picture pic=<default>, Label L=<default>, arc a, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool bar(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, Label legend=<default>, marker marker=<default>);
+void draw(picture pic=<default>, triangle t, pen p=<default>, marker marker=<default>);
+void draw(picture pic=<default>, triangle[] t, pen p=<default>, marker marker=<default>);
+int parabolanodesnumber(parabola p, real angle1, real angle2);
+line complementary(explicit line l);
+line[] complementary(explicit segment s);
+arc complementary(arc a);
+pair coordinates(point M);
+int circlenodesnumberfactor;
+coordsys operator init();
+point operator init();
+vector operator init();
+line operator init();
+segment operator init();
+bqe operator init();
+conic operator init();
+circle operator init();
+ellipse operator init();
+parabola operator init();
+hyperbola operator init();
+abscissa operator init();
+arc operator init();
+mass operator init();
+triangle operator init();
+trilinear operator init();
+inversion operator init();
+triangle triangle(line l1, line l2, line l3);
+transform vprojection(line l, bool safe=<default>);
+circle circumcircle(point A, point B, point C);
+circle circumcircle(triangle t);
+pen addpenarc;
+pen addpenarc(pen p);
+line reverse(line l);
+arc reverse(arc a);
 line vline(coordsys R=<default>);
 line vline;
-line isotomic(vertex V, point M);
-point isotomic(side side, point M);
-triangle isotomic(triangle t, point M);
-line[] tangents(circle c, point M);
-line[] tangents(ellipse el, point M);
-line[] tangents(parabola p, point M);
-line[] tangents(hyperbola h, point M);
-point isogonalconjugate(triangle t, point M);
-real centerToFocus(ellipse el, real a);
-pen addpenarc;
-pen addpenarc(pen p);
-int[] tricoef(side side);
-void perpendicularmark(picture pic=<default>, point z, explicit pair align, explicit pair dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, point z, vector align, vector dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, point z, explicit pair align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, point z, vector align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, line l1, line l2, real size=<default>, pen p=<default>, int quarter=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-real[] intersect(path g, explicit pair p, real fuzz=<default>);
-real[] intersect(path g, explicit point P, real fuzz=<default>);
-point incenter(point A, point B, point C);
-point incenter(triangle t);
-void write(explicit line l);
-void write(explicit segment s);
-void write(trilinear tri);
-path arctopath(arc a, int n);
+pair[] intersectionpoints(pair A, pair B, real a, real b, real c, real d, real f, real g);
+pair[] intersectionpoints(pair A, pair B, real[] equation);
+point[] intersectionpoints(line l, path g);
+point[] intersectionpoints(bqe bqe1, bqe bqe2);
+point[] intersectionpoints(triangle t, line l, bool extended=<default>);
+point[] intersectionpoints(line l, triangle t, bool extended=<default>);
+point[] intersectionpoints(line l, circle c);
+point[] intersectionpoints(circle c, line l);
+point[] intersectionpoints(line l, ellipse el);
+point[] intersectionpoints(ellipse el, line l);
+point[] intersectionpoints(line l, parabola p);
+point[] intersectionpoints(parabola p, line l);
+point[] intersectionpoints(line l, hyperbola h);
+point[] intersectionpoints(hyperbola h, line l);
+point[] intersectionpoints(line l, conic co);
+point[] intersectionpoints(conic co, line l);
+point[] intersectionpoints(conic co1, conic co2);
+point[] intersectionpoints(triangle t, conic co, bool extended=<default>);
+point[] intersectionpoints(conic co, triangle t, bool extended=<default>);
+point[] intersectionpoints(ellipse a, ellipse b);
+point[] intersectionpoints(ellipse a, circle b);
+point[] intersectionpoints(circle a, ellipse b);
+point[] intersectionpoints(ellipse a, parabola b);
+point[] intersectionpoints(parabola a, ellipse b);
+point[] intersectionpoints(ellipse a, hyperbola b);
+point[] intersectionpoints(hyperbola a, ellipse b);
+point[] intersectionpoints(circle a, parabola b);
+point[] intersectionpoints(parabola a, circle b);
+point[] intersectionpoints(circle a, hyperbola b);
+point[] intersectionpoints(hyperbola a, circle b);
+point[] intersectionpoints(parabola a, parabola b);
+point[] intersectionpoints(parabola a, hyperbola b);
+point[] intersectionpoints(hyperbola a, parabola b);
+point[] intersectionpoints(hyperbola a, hyperbola b);
+point[] intersectionpoints(circle c1, circle c2);
+point[] intersectionpoints(conic co, arc a);
+point[] intersectionpoints(arc a, conic co);
+point[] intersectionpoints(arc a1, arc a2);
+point[] intersectionpoints(line l, arc a);
+point[] intersectionpoints(arc a, line l);
+line tangent(circle c, abscissa x);
+line tangent(circle c, point M);
+line tangent(circle c, explicit vector v);
+line tangent(ellipse el, abscissa x);
+line tangent(parabola p, abscissa x);
+line tangent(hyperbola h, abscissa x);
+line tangent(explicit arc a, abscissa x);
+line tangent(explicit arc a, point M);
+void drawline(picture pic=<default>, triangle t, pen p=<default>);
 bool inside(ellipse el, point M);
 bool inside(parabola p, point M);
+side opposite(vertex V);
+vertex opposite(side side);
+line[] operator ^^(line l1, line l2);
+line[] operator ^^(line l1, line[] l2);
+line[] operator ^^(line[] l2, line l1);
+line[] operator ^^(line[] l1, line[] l2);
+triangle[] operator ^^(triangle[] t1, triangle t2);
+triangle[] operator ^^(... triangle[] t);
+point operator +(explicit point P1, explicit point P2);
+point operator +(explicit point P1, explicit pair p2);
+point operator +(explicit pair p1, explicit point p2);
+point operator +(point M, explicit vector v);
+point operator +(explicit pair m, explicit vector v);
+vector operator +(explicit vector v1, explicit vector v2);
+line operator +(line l, vector u);
+conic operator +(conic c, explicit point M);
+conic operator +(conic c, explicit pair m);
+conic operator +(conic c, vector v);
+circle operator +(explicit circle c, explicit point M);
+circle operator +(explicit circle c, pair m);
+circle operator +(explicit circle c, vector m);
+abscissa operator +(real x, explicit abscissa a);
+abscissa operator +(explicit abscissa a, real x);
+abscissa operator +(int x, explicit abscissa a);
+arc operator +(explicit arc a, point M);
+arc operator +(explicit arc a, vector v);
+mass operator +(mass M1, mass M2);
+mass operator +(explicit mass M, real x);
+mass operator +(explicit mass M, int x);
+point intersectionpoint(line l1, line l2);
+bool concurrent(... line[] l);
 void label(picture pic=<default>, Label L, explicit mass M, align align=<default>, string format=<default>, pen p=<default>, filltype filltype=<default>);
 void label(picture pic=<default>, Label L, vertex V, pair align=<default>, real alignFactor=<default>, pen p=<default>, filltype filltype=<default>);
 void label(picture pic=<default>, Label LA=<default>, Label LB=<default>, Label LC=<default>, triangle t, real alignAngle=<default>, real alignFactor=<default>, pen p=<default>, filltype filltype=<default>);
-path fromFocus(conic co, real angle1, real angle2, int n, bool direction);
-line hline(coordsys R=<default>);
-line hline;
-triangle tangential(triangle t);
-triangle pedal(triangle t, point M);
-line pedal(side side, point M);
-string massformat(string format=<default>, string s, mass M);
-coordsys defaultcoordsys;
-point intouch(side side);
-triangle intouch(triangle t);
-point orthocentercenter(point A, point B, point C);
-point orthocentercenter(triangle t);
-real rf(real x, real y, real z);
-abscissa nodabscissa(real x);
-abscissa nodabscissa(int x);
-abscissa nodabscissa(line l, point M);
-abscissa nodabscissa(circle c, point M);
-abscissa nodabscissa(ellipse el, point M);
-abscissa nodabscissa(parabola p, point M);
-abscissa nodabscissa(conic co, point M);
-abscissa nodabscissa(arc a, point M);
-int relativesystem;
-real[] bangles(picture pic=<default>, parabola p);
-real[][] bangles(picture pic=<default>, hyperbola h);
-bool onpath(picture pic=<default>, path g, point M, pen p=<default>);
-real rd(real x, real y, real z);
-int circlenodesnumberfactor;
-transform xscale(real k, point M);
 circle circle(explicit point C, real r);
 circle circle(point A, point B);
 circle circle(segment s);
@@ -2803,34 +2541,311 @@
 circle circle(point A, point B, point C);
 circle circle(triangle t);
 circle circle(inversion i);
+transform yscale(real k, point M);
+int sgnd(real x);
+int sgnd(int x);
+line line(point A, bool extendA=<default>, point B, bool extendB=<default>);
+line line(segment s);
+line line(real a, point A=<default>);
+line line(point A=<default>, real a);
+line line(int a, point A=<default>);
+line line(coordsys R=<default>, real slope, real origin);
+line line(coordsys R=<default>, real a, real b, real c);
+line line(circle c);
+line line(explicit side side);
+point ppoint(arc a, real x);
+arc arc(ellipse el, real angle1, real angle2, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>, bool direction=<default>);
+arc arc(ellipse el, explicit abscissa x1, explicit abscissa x2, bool direction=<default>);
+arc arc(ellipse el, point M, point N, bool direction=<default>);
+arc arc(explicit arc a, abscissa x1, abscissa x2);
+arc arc(explicit arc a, point M, point N);
+path arc(explicit pair B, explicit pair A, explicit pair C, real r);
+point operator -(explicit point P);
+point operator -(explicit point P1, explicit point P2);
+point operator -(explicit point P1, explicit pair p2);
+point operator -(explicit pair p1, explicit point P2);
+point operator -(point M, explicit vector v);
+vector operator -(explicit vector v);
+point operator -(explicit pair m, explicit vector v);
+vector operator -(explicit vector v1, explicit vector v2);
+line operator -(line l, vector u);
+conic operator -(conic c, explicit point M);
+conic operator -(conic c, explicit pair m);
+conic operator -(conic c, vector v);
+circle operator -(explicit circle c, explicit point M);
+circle operator -(explicit circle c, pair m);
+circle operator -(explicit circle c, vector m);
+abscissa operator -(explicit abscissa a);
+abscissa operator -(real x, explicit abscissa a);
+abscissa operator -(explicit abscissa a, real x);
+abscissa operator -(int x, explicit abscissa a);
+arc operator -(explicit arc a, point M);
+arc operator -(explicit arc a, vector v);
+mass operator -(mass M1, mass M2);
+mass operator -(explicit mass M, real x);
+mass operator -(explicit mass M, int x);
+real[] realquarticroots(real a, real b, real c, real d, real e);
+string defaultmassformat;
+coordsys canonicalcartesiansystem(ellipse el);
+coordsys canonicalcartesiansystem(parabola p);
+coordsys canonicalcartesiansystem(hyperbola h);
+coordsys canonicalcartesiansystem(explicit conic co);
+point centroid(point A, point B, point C);
+point centroid(triangle t);
+hyperbola hyperbola(point P1, point P2, real ae, bool byfoci=<default>);
+hyperbola hyperbola(point C, real a, real b, real angle=<default>);
+hyperbola hyperbola(bqe bqe);
+hyperbola hyperbola(point M1, point M2, point M3, point M4, point M5);
+transform rotate(explicit pair dir);
+transform rotate(explicit vector dir);
+transform rotate(explicit point dir);
+void addMargins(picture pic=<default>, real lmargin=<default>, real bmargin=<default>, real rmargin=<default>, real tmargin=<default>, bool rigid=<default>, bool allObject=<default>);
 ellipse ellipse(point F1, point F2, real a);
 ellipse ellipse(point F1, point F2, point M);
 ellipse ellipse(point C, real a, real b, real angle=<default>);
 ellipse ellipse(bqe bqe);
 ellipse ellipse(point M1, point M2, point M3, point M4, point M5);
-triangle medial(triangle t);
-transform projection(point A, point B);
-transform projection(point A, point B, point C, point D, bool safe=<default>);
-transform projection(line l);
-transform projection(line l1, line l2, bool safe=<default>);
-transform hprojection(line l, bool safe=<default>);
+path fromCenter(conic co, real angle1, real angle2, int n, bool direction);
+pen addpenline;
+pen addpenline(pen p);
+path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)(conic co);
+abscissa nodabscissa(real x);
+abscissa nodabscissa(int x);
+abscissa nodabscissa(line l, point M);
+abscissa nodabscissa(circle c, point M);
+abscissa nodabscissa(ellipse el, point M);
+abscissa nodabscissa(parabola p, point M);
+abscissa nodabscissa(conic co, point M);
+abscissa nodabscissa(arc a, point M);
+transform xscale(real k, point M);
+real[] intersect(path g, explicit pair p, real fuzz=<default>);
+real[] intersect(path g, explicit point P, real fuzz=<default>);
+point circumcenter(point A, point B, point C);
+point circumcenter(triangle t);
+line Ox(coordsys R=<default>);
+line Ox;
+real abs(coordsys R, pair m);
+real abs(explicit point M);
+trilinear trilinear(triangle t, real a, real b, real c);
+trilinear trilinear(triangle t, point M);
+trilinear trilinear(triangle t, real f(real, real, real), real a=<default>, real b=<default>, real c=<default>);
 vector dir(vertex V);
-hyperbola hyperbola(point P1, point P2, real ae, bool byfoci=<default>);
-hyperbola hyperbola(point C, real a, real b, real angle=<default>);
-hyperbola hyperbola(bqe bqe);
-hyperbola hyperbola(point M1, point M2, point M3, point M4, point M5);
-path Circle(pair c, real r, int n=<default>);
-real maxlength(pair a, pair b, int nx, int ny);
-void errorbar(picture pic, pair z, pair dp, pair dm, pen p=<default>, real size=<default>);
+real angle(explicit point M, coordsys R=<default>, bool warn=<default>);
+real angle(explicit vector v, coordsys R=<default>, bool warn=<default>);
+real angle(line l, coordsys R=<default>);
+real angle(line l1, line l2);
+real angle(arc a);
+triangle tangential(triangle t);
+real elle(real phi, real k);
+point conj(explicit point M);
+vector conj(explicit vector u);
+hyperbola conj(hyperbola h);
+mass mass(point M, real m);
+mass mass(explicit point P);
+mass mass(coordsys R, explicit pair p, real m);
+line[] tangents(circle c, point M);
+line[] tangents(ellipse el, point M);
+line[] tangents(parabola p, point M);
+line[] tangents(hyperbola h, point M);
+segment segment(point A, point B);
+segment segment(line l);
+segment segment(explicit side side);
+bool simeq(point A, point B, real fuzz=<default>);
+bool simeq(point a, real b, real fuzz=<default>);
+triangle triangleabc(real a, real b, real c, real angle=<default>, point A=<default>);
+void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit pair align=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
+void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit vector align, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
+bool isparabola(bqe bqe);
+real approximate(real t);
+real[] approximate(real[] T);
+coordsys defaultcoordsys;
+real epsgeo;
+real rf(real x, real y, real z);
+point gergonne(triangle t);
+int angularsystem;
+abscissa curabscissa(real x);
+abscissa curabscissa(int x);
+abscissa curabscissa(line l, point M);
+abscissa curabscissa(circle c, point M);
+abscissa curabscissa(ellipse el, point M);
+abscissa curabscissa(parabola p, point M);
+abscissa curabscissa(conic co, point M);
+abscissa curabscissa(arc a, point M);
+real rd(real x, real y, real z);
+coordsys cartesiansystem(pair O=<default>, pair i, pair j);
+void show(picture pic=<default>, Label lo=<default>, Label li=<default>, Label lj=<default>, coordsys R, pen dotpen=<default>, pen xpen=<default>, pen ypen=<default>, pen ipen=<default>, pen jpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
+void show(Label L, vector v, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
+void show(picture pic=<default>, line l, pen p=<default>);
+void show(picture pic=<default>, Label LA=<default>, Label LB=<default>, Label LC=<default>, Label La=<default>, Label Lb=<default>, Label Lc=<default>, triangle t, pen p=<default>, filltype filltype=<default>);
+pair operator /(pair p, coordsys R);
+point operator /(explicit point P, real x);
+point operator /(real x, explicit point P);
+vector operator /(explicit vector v, real x);
+line operator /(line l, real x);
+line operator /(line l, int x);
+circle operator /(explicit circle c, real x);
+circle operator /(explicit circle c, int x);
+ellipse operator /(ellipse el, real x);
+abscissa operator /(real x, explicit abscissa a);
+abscissa operator /(explicit abscissa a, real x);
+abscissa operator /(int x, explicit abscissa a);
+arc operator /(explicit arc a, real x);
+mass operator /(explicit mass M, real x);
+mass operator /(explicit mass M, int x);
+coordsys currentcoordsys;
+point changecoordsys(coordsys R, point M);
+vector changecoordsys(coordsys R, vector v);
+line changecoordsys(coordsys R, line l);
+bqe changecoordsys(coordsys R, bqe bqe);
+conic changecoordsys(coordsys R, conic co);
+bool samecoordsys(bool warn=<default> ... point[] M);
+bool samecoordsys(bool warn=<default> ... bqe[] bqes);
+point[] standardizecoordsys(coordsys R=<default>, bool warn=<default> ... point[] M);
+pair locate(point P);
+point locate(pair p);
+pair locate(explicit vector v);
+real length(explicit point M);
+real length(segment s);
+conic conic(point F, line l, real e);
+conic conic(point M1, point M2, point M3, point M4, point M5);
+conic conic(bqe bqe);
+transform rotateO(real a);
+transform scaleO(real x);
+transform xscaleO(real x);
+line extend(line l);
+transform yscaleO(real x);
+real linemargin;
+real linemargin();
+bool defined(point P);
+triangle antipedal(triangle t, point M);
+bool operator @(point m, line l);
+bool operator @(point M, conic co);
+bool operator @(point M, explicit circle c);
+bool operator @(point M, arc a);
+bool finite(explicit point p);
+point orthocentercenter(point A, point B, point C);
+point orthocentercenter(triangle t);
+bool onpath(picture pic=<default>, path g, point M, pen p=<default>);
+bool sameside(point M, point N, point O);
+bool sameside(point M, point P, line l);
+point[] sameside(point M, line l1, line l2);
+path currentpolarconicroutine(conic co, real angle1, real angle2, int n, bool direction);
+int ellipsenodesnumber(real a, real b);
+int ellipsenodesnumber(real a, real b, real angle1, real angle2, bool dir);
+path NoModifier(path);
+void Drawline(picture pic=<default>, Label L=<default>, pair P, bool dirP=<default>, pair Q, bool dirQ=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
+void distance(picture pic=<default>, Label L=<default>, point A, point B, bool rotated=<default>, real offset=<default>, pen p=<default>, pen joinpen=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
+real distance(point M, line l);
+real distance(line l, point M);
+int hyperbolanodesnumberfactor;
+real perpfactor;
+pair attract(pair m, path g, real fuzz=<default>);
+point attract(point M, path g, real fuzz=<default>);
+point incenter(point A, point B, point C);
+point incenter(triangle t);
+coordsys coordsys(line l);
+coordsys coordsys(conic co);
+coordsys coordsys(ellipse el);
+line Oy(coordsys R=<default>);
+line Oy;
+void dot(picture pic=<default>, Label L, explicit point Z, align align=<default>, string format=<default>, pen p=<default>);
+real dot(point A, point B);
+real dot(point A, explicit pair B);
+real dot(explicit pair A, point B);
+void dot(picture pic=<default>, Label L, explicit mass M, align align=<default>, string format=<default>, pen p=<default>);
+void dot(picture pic=<default>, triangle t, pen p=<default>);
+real centerToFocus(ellipse el, real a);
+line parallel(point M, line l);
+line parallel(point M, explicit vector dir);
+line parallel(point M, explicit pair dir);
+bool parallel(line l1, line l2, bool strictly=<default>);
+line perpendicular(point M, line l);
+line perpendicular(point M, explicit vector normal);
+line perpendicular(point M, explicit pair normal);
+bool perpendicular(line l1, line l2);
+void perpendicular(picture pic=<default>, pair z, pair align, pair dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicular(picture pic=<default>, pair z, pair align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+real sharpangle(line l1, line l2);
+line bisector(line l1, line l2, real angle=<default>, bool sharp=<default>);
+line bisector(point A, point B, point C, point D, real angle=<default>, bool sharp=<default>);
+line bisector(segment s, real angle=<default>);
+line bisector(point A, point B, real angle=<default>);
+line bisector(vertex V, real angle=<default>);
+line bisector(side side);
+bqe bqe(coordsys R=<default>, real a, real b, real c, real d, real e, real f);
+bqe bqe(point M1, point M2, point M3, point M4, point M5);
+int conicnodesfactor;
+int conicnodesnumber(conic co, real angle1, real angle2, bool dir=<default>);
+int circlenodesnumber(real r);
+int circlenodesnumber(real r, real angle1, real angle2);
+int parabolanodesnumberfactor;
+int hyperbolanodesnumber(hyperbola h, real angle1, real angle2);
+path arcfromfocus(conic co, real angle1, real angle2, int n=<default>, bool direction=<default>);
+bool byfoci;
+bool byvertices;
+parabola parabola(point F, line l);
+parabola parabola(point F, point vertex);
+parabola parabola(point F, real a, real angle);
+parabola parabola(bqe bqe);
+parabola parabola(point M1, point M2, point M3, line l);
+parabola parabola(point M1, point M2, point M3, point M4, point M5);
+real operator ^(point M, explicit circle c);
+path arcfromcenter(ellipse el, real angle1, real angle2, bool direction=<default>, int n=<default>);
+path arcfromcenter(hyperbola h, real angle1, real angle2, int n=<default>, bool direction=<default>);
+path arcfromcenter(explicit conic co, real angle1, real angle2, int n, bool direction=<default>);
+path fromFocus(conic co, real angle1, real angle2, int n, bool direction);
+bqe equation(ellipse el);
+bqe equation(parabola p);
+bqe equation(hyperbola h);
+bqe equation(explicit conic co);
+real focusToCenter(ellipse el, real a);
+int relativesystem;
+int curvilinearsystem;
+int nodesystem;
+abscissa relabscissa(real x);
+abscissa relabscissa(int x);
+abscissa relabscissa(line l, point M);
+abscissa relabscissa(circle c, point M);
+abscissa relabscissa(ellipse el, point M);
+abscissa relabscissa(conic co, point M);
+abscissa relabscissa(arc a, point M);
+void markarc(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, arc a, pen sectorpen=<default>, pen markpen=<default>, marginT margin(path, pen)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marker marker=<default>);
+int arcnodesnumber(explicit arc a);
+path arctopath(arc a, int n);
+real inradius(point A, point B, point C);
+real inradius(triangle t);
+real exradius(point A, point B, point C);
+real exradius(side side);
+circle excircle(point A, point B, point C);
+circle excircle(side side);
+int[] numarray;
+line altitude(vertex V);
+line altitude(side side);
+int[] tricoef(side side);
+path Arc(pair c, real r, real angle1, real angle2, bool direction, int n=<default>);
+path Arc(pair c, real r, real angle1, real angle2, int n=<default>);
+path Arc(pair c, explicit pair z1, explicit pair z2, bool direction=<default>, int n=<default>);
 guide polargraph(picture pic=<default>, real r(real), real a, real b, int n=<default>, guide join(... guide[])=<default>);
 guide polargraph(picture pic=<default>, real[] r, real[] theta, guide join(... guide[])=<default>);
-void checkconditionlength(int x, int y);
-guide Straight(... guide[]);
+pair polar(real r, real theta);
+string conditionlength;
+guide Hermite(... guide[])(real[] splinetype(real[], real[]));
+guide Hermite(... guide[]);
+guide graph(pair f(real), real, real, int)(guide join(... guide[]));
+guide[] graph(pair f(real), real, real, int)(guide join(... guide[]), bool3 cond(real));
+guide graph(picture pic=<default>, real f(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
+guide[] graph(picture pic=<default>, real f(real), real a, real b, int n=<default>, real T(real)=<default>, bool3 cond(real), guide join(... guide[])=<default>);
+guide graph(picture pic=<default>, real x(real), real y(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
+guide[] graph(picture pic=<default>, real x(real), real y(real), real a, real b, int n=<default>, real T(real)=<default>, bool3 cond(real), guide join(... guide[])=<default>);
+guide graph(picture pic=<default>, pair z(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
+guide[] graph(picture pic=<default>, pair z(real), real a, real b, int n=<default>, real T(real)=<default>, bool3 cond(real), guide join(... guide[])=<default>);
+guide graph(picture pic=<default>, pair[] z, guide join(... guide[])=<default>);
+guide[] graph(picture pic=<default>, pair[] z, bool3[] cond, guide join(... guide[])=<default>);
+guide graph(picture pic=<default>, real[] x, real[] y, guide join(... guide[])=<default>);
+guide[] graph(picture pic=<default>, real[] x, real[] y, bool3[] cond, guide join(... guide[])=<default>);
 picture secondaryY(picture primary=<default>, void f(picture));
+picture secondaryX(picture primary=<default>, void f(picture));
 string noprimary;
-path Arc(pair c, real r, real angle1, real angle2, bool direction, int n=<default>);
-path Arc(pair c, real r, real angle1, real angle2, int n=<default>);
-path Arc(pair c, explicit pair z1, explicit pair z2, bool direction=<default>, int n=<default>);
 void labely(picture pic=<default>, Label L=<default>, explicit pair z, align align=<default>, string format=<default>, pen p=<default>);
 void labely(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
 void labely(picture pic=<default>, Label L, string format=<default>, explicit pen p=<default>);
@@ -2837,95 +2852,90 @@
 void labelx(picture pic=<default>, Label L=<default>, explicit pair z, align align=<default>, string format=<default>, pen p=<default>);
 void labelx(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
 void labelx(picture pic=<default>, Label L, string format=<default>, explicit pen p=<default>);
-void xtick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, real x, pair dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, real x, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 void tick(picture pic=<default>, pair z, pair dir, real size=<default>, pen p=<default>);
 void tick(picture pic=<default>, Label L, real value, explicit pair z, pair dir, string format=<default>, real size=<default>, pen p=<default>);
-real ScaleX(picture pic=<default>, real x);
-picture secondaryX(picture primary=<default>, void f(picture));
 void yaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool autorotate=<default>);
 void xaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
 void limits(picture pic=<default>, pair min, pair max, bool crop=<default>);
-void crop(picture pic=<default>);
-string conditionlength;
 void ylimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
-void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
 void xaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
-real ytrans(transform t, real y);
+void YZero(picture, axisT)(bool extend=<default>);
+void YZero(picture, axisT);
 void YEquals(picture, axisT)(real y, bool extend=<default>);
-real xtrans(transform t, real x);
-void Top(picture, axisT)(bool extend=<default>);
-void Top(picture, axisT);
-void Bottom(picture, axisT)(bool extend=<default>);
-void Bottom(picture, axisT);
-axisT axis;
-void axis(picture pic=<default>, Label L=<default>, path g, path g2=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>), ticklocate locate, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
-int Max;
-int Value;
+void XEquals(picture, axisT)(real x, bool extend=<default>);
+void Left(picture, axisT)(bool extend=<default>);
+void Left(picture, axisT);
+int Min;
 void RightTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void RightTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void RightTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
-tickvalues OmitTick(tickvalues)(... real[] x);
+void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)();
+void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
-bool logaxiscoverage(int N, transform T, path g, ticklocate locate, pair side, int sign, real Size, Label F, string ticklabel(real), real limit, int first, int last);
-void labelaxis(frame f, transform T, Label L, path g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
-ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, pair dir(real)=<default>);
-autoscaleT defaultS;
-string DefaultLogFormat(real)(int base);
-string DefaultLogFormat(real);
-string NoZeroFormat(real);
+real zerotickfuzz;
+void drawtick(frame f, transform T, path g, path g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
+pair ticklabelshift(pair align, pen p=<default>);
 string DefaultFormat(real);
+string Format(real)(string s=<default>);
 real upscale(real b, real a);
-scaleT Broken(real a, real b, bool automin=<default>, bool automax=<default>);
+bool logaxiscoverage(int N, transform T, path g, ticklocate locate, pair side, int sign, real Size, Label F, string ticklabel(real), real limit, int first, int last);
+pair labeltick(frame d, transform T, path g, ticklocate locate, real val, pair side, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
+int[] divisors(int a, int b);
+scientific scientific(real x);
+scaleT Linear;
+scaleT Linear(bool automin=<default>, bool automax=<default>, real s=<default>, real intercept=<default>);
 bool axiscoverage(int N, transform T, path g, ticklocate locate, real Step, pair side, int sign, real Size, Label F, string ticklabel(real), real norm, real limit);
-void xequals(picture pic=<default>, Label L=<default>, real x, bool extend=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
-void XEquals(picture, axisT)(real x, bool extend=<default>);
+Label Break;
+tickvalues Break(tickvalues)(real, real);
+void errorbar(picture pic, pair z, pair dp, pair dm, pen p=<default>, real size=<default>);
+real linear(real)(real S(real x)=<default>, real Min, real Max);
+tickvalues None(tickvalues v);
 path[] segment(pair[] z, bool[] cond, guide join(... guide[])=<default>);
-pair zero(real);
-tickvalues OmitTickIntervals(tickvalues)(real[] a, real[] b);
+int Max;
+tickvalues NoZero(tickvalues);
+autoscaleT defaultS;
+real ScaleY(picture pic=<default>, real y);
+void yequals(picture pic=<default>, Label L=<default>, real y, bool extend=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+guide Spline(... guide[]);
+bounds autoscale(real Min, real Max, scaleT scale=<default>);
+void autoscale(picture pic=<default>, void axis(picture, axisT));
 void Right(picture, axisT)(bool extend=<default>);
 void Right(picture, axisT);
-guide Hermite(... guide[])(real[] splinetype(real[], real[]));
-guide Hermite(... guide[]);
-scaleT Logarithmic;
-void scale(picture pic=<default>, scaleT x, scaleT y=<default>, scaleT z=<default>);
-void scale(picture pic=<default>, bool xautoscale=<default>, bool yautoscale=<default>, bool zautoscale=<default>);
-tickvalues None(tickvalues v);
-void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)();
-void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
-pair polar(real r, real theta);
-void Left(picture, axisT)(bool extend=<default>);
-void Left(picture, axisT);
-void yequals(picture pic=<default>, Label L=<default>, real y, bool extend=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
-string OmitFormat(real)(string s=<default> ... real[] x);
-tickvalues OmitTickInterval(tickvalues)(real a, real b);
-void drawtick(frame f, transform T, path g, path g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
-void axes(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, bool extend=<default>, pair min=<default>, pair max=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+void errorbars(picture pic=<default>, pair[] z, pair[] dp, pair[] dm=<default>, bool[] cond=<default>, pen p=<default>, real size=<default>);
+void errorbars(picture pic=<default>, real[] x, real[] y, real[] dpx, real[] dpy, real[] dmx=<default>, real[] dmy=<default>, bool[] cond=<default>, pen p=<default>, real size=<default>);
+void errorbars(picture pic=<default>, real[] x, real[] y, real[] dpy, bool[] cond=<default>, pen p=<default>, real size=<default>);
+void XZero(picture, axisT)(bool extend=<default>);
+void XZero(picture, axisT);
+void LeftRight(picture, axisT)(bool extend=<default>);
+void LeftRight(picture, axisT);
+void labelaxis(frame f, transform T, Label L, path g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
+path Circle(pair c, real r, int n=<default>);
+real ytrans(transform t, real y);
+string LogFormat(real)(int base);
+string LogFormat(real);
+void BottomTop(picture, axisT)(bool extend=<default>);
+void BottomTop(picture, axisT);
+void checkconditionlength(int x, int y);
+pair zero(real);
+void label(picture pic, Label L, pair z, real x, align align, string format, pen p);
+pair tickMin(picture pic);
+tickvalues generateticks(int sign, Label F=<default>, string ticklabel(real)=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, real Size=<default>, real size=<default>, transform T, pair side, path g, real limit, pen p, ticklocate locate, int[] divisor, bool opposite);
+int Both;
+ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, pair dir(real)=<default>);
+string NoZeroFormat(real);
+string trailingzero;
 picture vectorfield(path vector(real), path g, int n, bool truesize=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
 picture vectorfield(path vector(pair), pair a, pair b, int nx=<default>, int ny=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
+tickvalues OmitTick(tickvalues)(... real[] x);
+void Top(picture, axisT)(bool extend=<default>);
+void Top(picture, axisT);
+real maxlength(pair a, pair b, int nx, int ny);
+real ScaleX(picture pic=<default>, real x);
 pair tickMax(picture pic);
-real linear(real)(real S(real x)=<default>, real Min, real Max);
-int Both;
-pair tickMin(picture pic);
-pair ticklabelshift(pair align, pen p=<default>);
-int Min;
-scaleT Linear;
-scaleT Linear(bool automin=<default>, bool automax=<default>, real s=<default>, real intercept=<default>);
-string LogFormat(real)(int base);
-string LogFormat(real);
-Label Break;
-tickvalues Break(tickvalues)(real, real);
-void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
-tickvalues NoZero(tickvalues);
-int[] divisors(int a, int b);
 scientific operator init();
 bounds operator init();
 ticklocate operator init();
@@ -2932,95 +2942,115 @@
 locateT operator init();
 tickvalues operator init();
 axisT operator init();
+scaleT Logarithmic;
+real xtrans(transform t, real x);
+void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
+void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
+pair Scale(picture pic=<default>, pair z);
+void xequals(picture pic=<default>, Label L=<default>, real x, bool extend=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+scaleT Log;
+scaleT Log(bool automin=<default>, bool automax=<default>);
 string signedtrailingzero;
-void XZero(picture, axisT)(bool extend=<default>);
-void XZero(picture, axisT);
-string trailingzero;
-real ScaleY(picture pic=<default>, real y);
+scaleT BrokenLog(real a, real b, bool automin=<default>, bool automax=<default>);
 void xlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
-pair labeltick(frame d, transform T, path g, ticklocate locate, real val, pair side, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
-tickvalues generateticks(int sign, Label F=<default>, string ticklabel(real)=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, real Size=<default>, real size=<default>, transform T, pair side, path g, real limit, pen p, ticklocate locate, int[] divisor, bool opposite);
+void scale(picture pic=<default>, scaleT x, scaleT y=<default>, scaleT z=<default>);
+void scale(picture pic=<default>, bool xautoscale=<default>, bool yautoscale=<default>, bool zautoscale=<default>);
+int Value;
+void Bottom(picture, axisT)(bool extend=<default>);
+void Bottom(picture, axisT);
+void xtick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, real x, pair dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, real x, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 string autoformat(string format=<default>, real norm ... real[] a);
-pair Scale(picture pic=<default>, pair z);
 void ytick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
 void ytick(picture pic=<default>, real y, pair dir=<default>, real size=<default>, pen p=<default>);
 void ytick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 void ytick(picture pic=<default>, Label L, real y, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-guide graph(pair f(real), real, real, int)(guide join(... guide[]));
-guide[] graph(pair f(real), real, real, int)(guide join(... guide[]), bool3 cond(real));
-guide graph(picture pic=<default>, real f(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
-guide[] graph(picture pic=<default>, real f(real), real a, real b, int n=<default>, real T(real)=<default>, bool3 cond(real), guide join(... guide[])=<default>);
-guide graph(picture pic=<default>, real x(real), real y(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
-guide[] graph(picture pic=<default>, real x(real), real y(real), real a, real b, int n=<default>, real T(real)=<default>, bool3 cond(real), guide join(... guide[])=<default>);
-guide graph(picture pic=<default>, pair z(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
-guide[] graph(picture pic=<default>, pair z(real), real a, real b, int n=<default>, real T(real)=<default>, bool3 cond(real), guide join(... guide[])=<default>);
-guide graph(picture pic=<default>, pair[] z, guide join(... guide[])=<default>);
-guide[] graph(picture pic=<default>, pair[] z, bool3[] cond, guide join(... guide[])=<default>);
-guide graph(picture pic=<default>, real[] x, real[] y, guide join(... guide[])=<default>);
-guide[] graph(picture pic=<default>, real[] x, real[] y, bool3[] cond, guide join(... guide[])=<default>);
-scaleT BrokenLog(real a, real b, bool automin=<default>, bool automax=<default>);
-void YZero(picture, axisT)(bool extend=<default>);
-void YZero(picture, axisT);
-scientific scientific(real x);
-guide Spline(... guide[]);
-void errorbars(picture pic=<default>, pair[] z, pair[] dp, pair[] dm=<default>, bool[] cond=<default>, pen p=<default>, real size=<default>);
-void errorbars(picture pic=<default>, real[] x, real[] y, real[] dpx, real[] dpy, real[] dmx=<default>, real[] dmy=<default>, bool[] cond=<default>, pen p=<default>, real size=<default>);
-void errorbars(picture pic=<default>, real[] x, real[] y, real[] dpy, bool[] cond=<default>, pen p=<default>, real size=<default>);
-bounds autoscale(real Min, real Max, scaleT scale=<default>);
-void autoscale(picture pic=<default>, void axis(picture, axisT));
-scaleT Log;
-scaleT Log(bool automin=<default>, bool automax=<default>);
-string Format(real)(string s=<default>);
 string baselinetemplate;
-void label(picture pic, Label L, pair z, real x, align align, string format, pen p);
-void BottomTop(picture, axisT)(bool extend=<default>);
-void BottomTop(picture, axisT);
-real zerotickfuzz;
-void LeftRight(picture, axisT)(bool extend=<default>);
-void LeftRight(picture, axisT);
-void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void labelz3(picture pic=<default>, Label L=<default>, real z, align align=<default>, string format=<default>, pen p=<default>);
+guide Straight(... guide[]);
+scaleT Broken(real a, real b, bool automin=<default>, bool automax=<default>);
+tickvalues OmitTickIntervals(tickvalues)(real[] a, real[] b);
+axisT axis;
+void axis(picture pic=<default>, Label L=<default>, path g, path g2=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>), ticklocate locate, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
+string DefaultLogFormat(real)(int base);
+string DefaultLogFormat(real);
+tickvalues OmitTickInterval(tickvalues)(real a, real b);
+void crop(picture pic=<default>);
+void axes(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, bool extend=<default>, pair min=<default>, pair max=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+string OmitFormat(real)(string s=<default> ... real[] x);
 void labelz(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
 void ztick3(picture pic=<default>, real z, triple dir=<default>, real size=<default>, pen p=<default>);
 void ztick3(picture pic=<default>, Label L, real z, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ztick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void ztick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 void ytick3(picture pic=<default>, real y, triple dir=<default>, real size=<default>, pen p=<default>);
 void ytick3(picture pic=<default>, Label L, real y, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void xtick3(picture pic=<default>, real x, triple dir=<default>, real size=<default>, pen p=<default>);
-void xtick3(picture pic=<default>, Label L, real x, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-real ScaleZ(picture pic=<default>, real z);
-void zlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
-void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
 void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
 void autoscale3(picture pic=<default>, void axis(picture, axisT));
+void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
 void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
 triple defaultdir(triple X, triple Y, triple Z, bool opposite=<default>, projection P);
+real ztrans(real[][] t, real z);
+void XYZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void XYZero(picture, axisT);
 void YZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
 void YZZero(picture, axisT);
-void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
 void XZEquals(picture, axisT)(real x, real z, triple align=<default>, bool extend=<default>);
 void YZEquals(picture, axisT)(real y, real z, triple align=<default>, bool extend=<default>);
 void Bounds(picture, axisT)(int type=<default>, int type2=<default>, triple align=<default>, bool extend=<default>);
 void Bounds(picture, axisT);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
 void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)();
+void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
 void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-triple Dir(real)(triple dir);
 surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
-void XYZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void XYZero(picture, axisT);
+void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
+void zlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
+bool vperiodic(triple[][] a);
+void xtick3(picture pic=<default>, real x, triple dir=<default>, real size=<default>, pen p=<default>);
+void xtick3(picture pic=<default>, Label L, real x, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+bool uperiodic(triple[][] a);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+triple tickMin3(picture pic);
+void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
 triple tickMax3(picture pic);
-triple tickMin3(picture pic);
-void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)();
-void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-real ztrans(real[][] t, real z);
+void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen[] p, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
+void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
+void labely3(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
+void ytick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void Straight(flatguide3)(... void(flatguide3)[]);
+real xtrans(real[][] t, real x);
+void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
+real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
+locateT operator init();
+triple Dir(real)(triple dir);
+void xtick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, string name=<default>, render render=<default>);
+void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
+ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, triple dir(real));
+void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void XZZero(picture, axisT);
+real ytrans(real[][] t, real y);
+path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
+void labelaxis(picture pic, real[][] T, Label L, path3 g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
+void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
+real ScaleZ(picture pic=<default>, real z);
 void Spline(flatguide3)(... void(flatguide3)[]);
+void labelz3(picture pic=<default>, Label L=<default>, real z, align align=<default>, string format=<default>, pen p=<default>);
+path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
 void graph(flatguide3)(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]));
 void(flatguide3)[] graph(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]), bool3 cond(real));
 void graph(flatguide3)(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
@@ -3035,30 +3065,24 @@
 void graph(flatguide3)(triple F(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
 void graph(flatguide3)(picture pic=<default>, real f(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
 void graph(flatguide3)(real f(pair), path p, int n=<default>, real T(pair), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
-void ytick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen[] p, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
-void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
+void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
+path3 Arc(triple c, triple v1, triple v2, triple normal=<default>, bool direction=<default>, int n=<default>);
+path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, bool direction, int n=<default>);
+path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, int n=<default>);
+void labeltick(picture pic, real[][] T, path3 g, ticklocate locate, real val, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
+void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void labely(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
+void tick(picture pic=<default>, triple v, triple dir, real size=<default>, pen p=<default>);
+void tick(picture pic=<default>, Label L, real value, triple v, triple dir, string format=<default>, real size=<default>, pen p=<default>);
+void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
 triple ticklabelshift(triple align, pen p=<default>);
-void ztick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void ztick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+triple polar(real r, real theta, real phi);
 triple Scale(picture pic=<default>, triple v);
-triple polar(real r, real theta, real phi);
-picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, string name=<default>, render render=<default>);
-void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
-void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-void labely3(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
-locateT operator init();
-void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-bool vperiodic(triple[][] a);
-path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void XZZero(picture, axisT);
-void labeltick(picture pic, real[][] T, path3 g, ticklocate locate, real val, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
+void limits(picture pic=<default>, triple min, triple max);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
 surface surface(triple[][] f, bool[][] cond=<default>);
 surface surface(real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
 surface surface(real[][] f, pair a, pair b, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
@@ -3067,140 +3091,118 @@
 surface surface(triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
 surface surface(real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, bool cond(pair z)=<default>);
 surface surface(real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool cond(pair z)=<default>);
-path3 Arc(triple c, triple v1, triple v2, triple normal=<default>, bool direction=<default>, int n=<default>);
-path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, bool direction, int n=<default>);
-path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, int n=<default>);
-void labely(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void xtick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
-void labelaxis(picture pic, real[][] T, Label L, path3 g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
-void tick(picture pic=<default>, triple v, triple dir, real size=<default>, pen p=<default>);
-void tick(picture pic=<default>, Label L, real value, triple v, triple dir, string format=<default>, real size=<default>, pen p=<default>);
-void Straight(flatguide3)(... void(flatguide3)[]);
-real xtrans(real[][] t, real x);
-real ytrans(real[][] t, real y);
-ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, triple dir(real));
-real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
-void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
-void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-bool uperiodic(triple[][] a);
-path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
-void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void limits(picture pic=<default>, triple min, triple max);
+void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
 real axiscoverage;
-real ylabelwidth;
 real Ticksize;
+real ticksize;
 int nmesh;
+int nCircle;
+real epsilon;
+real ylabelwidth;
 int ngraph;
+real axislabelfactor;
 bool Crop;
-int nCircle;
-real ticksize;
 bool NoCrop;
-real epsilon;
-real axislabelfactor;
+guide hermite(real[] x, real[] y, real[] splinetype(real[], real[])=<default>);
 real[] monotonic(real[] x, real[] y);
 real[] clamped(real[], real[])(real slopea, real slopeb);
-real[] natural(real[] x, real[] y);
-real[] periodic(real[] x, real[] y);
+real[] linear(real[] x, real[] y);
 string differentlengths;
 string morepoints;
+real[] Spline(real[] x, real[] y);
+real[](real[], real[])[] Spline;
+real[] notaknot(real[] x, real[] y);
+real[] periodic(real[] x, real[] y);
 void checklengths(int x, int y, string text=<default>);
-real[] notaknot(real[] x, real[] y);
-real[] linear(real[] x, real[] y);
-guide hermite(real[] x, real[] y, real[] splinetype(real[], real[])=<default>);
+real[] natural(real[] x, real[] y);
 void checkincreasing(real[] x);
-real[] Spline(real[] x, real[] y);
-real[](real[], real[])[] Spline;
-void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen pGrid=<default>, pen pgrid=<default>, bool above=<default>);
-void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen[] pGrid, pen[] pgrid, bool above=<default>);
-grid3(picture pic)[] ZX_ZYgrid(position posa=<default>, position posb=<default>);
-grid3(picture pic)[] ZX_ZYgrid;
 grid3(picture pic)[] YX_YZgrid(position posa=<default>, position posb=<default>);
 grid3(picture pic)[] YX_YZgrid;
+grid3(picture pic)[] YZYgrid(position pos=<default>);
+grid3(picture pic)[] YZYgrid;
 grid3(picture pic)[] XZXgrid(position pos=<default>);
 grid3(picture pic)[] XZXgrid;
 grid3(picture pic)[] ZXZgrid(position pos=<default>);
 grid3(picture pic)[] ZXZgrid;
-grid3(picture pic)[] YXYgrid(position pos=<default>);
-grid3(picture pic)[] YXYgrid;
-grid3(picture pic)[] XYXgrid(position pos=<default>);
-grid3(picture pic)[] XYXgrid;
 grid3 ZYgrid(picture pic)(position pos=<default>);
 grid3 ZYgrid(picture pic);
 grid3 YZgrid(picture pic)(position pos=<default>);
 grid3 YZgrid(picture pic);
+grid3 ZXgrid(picture pic)(position pos=<default>);
+grid3 ZXgrid(picture pic);
 grid3 XZgrid(picture pic)(position pos=<default>);
 grid3 XZgrid(picture pic);
 grid3 YXgrid(picture pic)(position pos=<default>);
 grid3 YXgrid(picture pic);
-grid3(picture pic)[] ZYZgrid(position pos=<default>);
-grid3(picture pic)[] ZYZgrid;
-triple YZ(picture pic);
-grid3(picture pic)[] operator cast(grid3 gridroutine(picture pic));
-grid3(picture pic)[][] operator cast(grid3(picture pic)[] gridroutine);
-grid3(picture pic)[][] operator cast(grid3 gridroutine(picture pic));
-grid3(picture pic)[] YZYgrid(position pos=<default>);
-grid3(picture pic)[] YZYgrid;
-triple Y(picture pic);
-void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
-grid3(picture pic)[][] XYZgrid(position pos=<default>);
-grid3(picture pic)[][] XYZgrid;
-position top;
 grid3 XYgrid(picture pic)(position pos=<default>);
 grid3 XYgrid(picture pic);
-void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
 ticksgridT InTicks()(Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
-triple X(picture pic);
+void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
 position middle;
-grid3 ZXgrid(picture pic)(position pos=<default>);
-grid3 ZXgrid(picture pic);
-triple XY(picture pic);
-grid3(picture pic)[] XY_XZgrid(position posa=<default>, position posb=<default>);
-grid3(picture pic)[] XY_XZgrid;
+grid3(picture pic)[] YXYgrid(position pos=<default>);
+grid3(picture pic)[] YXYgrid;
+grid3(picture pic)[] ZX_ZYgrid(position posa=<default>, position posb=<default>);
+grid3(picture pic)[] ZX_ZYgrid;
 ticksgridT OutTicks()(Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
+position top;
+triple ZX(picture pic);
+triple X(picture pic);
 grid3 operator init();
 ticksgridT operator init();
+triple Y(picture pic);
+grid3(picture pic)[] operator cast(grid3 gridroutine(picture pic));
+grid3(picture pic)[][] operator cast(grid3(picture pic)[] gridroutine);
+grid3(picture pic)[][] operator cast(grid3 gridroutine(picture pic));
+position bottom;
+void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen pGrid=<default>, pen pgrid=<default>, bool above=<default>);
+void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen[] pGrid, pen[] pgrid, bool above=<default>);
+grid3(picture pic)[] XY_XZgrid(position posa=<default>, position posb=<default>);
+grid3(picture pic)[] XY_XZgrid;
+grid3(picture pic)[] ZYZgrid(position pos=<default>);
+grid3(picture pic)[] ZYZgrid;
+grid3(picture pic)[] XYXgrid(position pos=<default>);
+grid3(picture pic)[] XYXgrid;
+void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
 ticksgridT InOutTicks()(Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
-void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
-triple ZX(picture pic);
+triple YZ(picture pic);
+triple XY(picture pic);
+void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
+grid3(picture pic)[][] XYZgrid(position pos=<default>);
+grid3(picture pic)[][] XYZgrid;
 triple Z(picture pic);
-position bottom;
+real fspline(real)(real[] x, real[] y, real[] splinetype(real[], real[])=<default>);
+real fhorner(real)(horner sh);
+horner operator init();
+horner hdiffdiv(real[] x, real[] y, real[] dy);
 real pwhermite(real)(real[] x, real[] y, real[] dy);
-horner hdiffdiv(real[] x, real[] y, real[] dy);
 horner diffdiv(real[] x, real[] y);
-real fhorner(real)(horner sh);
-horner operator init();
-real fspline(real)(real[] x, real[] y, real[] splinetype(real[], real[])=<default>);
 void labelpath(frame f, Label L, path g, string justify=<default>, pen p=<default>);
 void labelpath(picture pic=<default>, Label L, path g, string justify=<default>, pen p=<default>);
+string RightJustified;
 string Centered;
-string RightJustified;
 string LeftJustified;
 surface labelpath(string s, path3 p, real angle=<default>, triple optional=<default>);
+triple nextnormal(triple p, triple q);
+triple[] firstframe(path3 p, triple optional=<default>);
 triple[] nextframe(path3 p, real reltimestart, triple[] start, real reltimeend, int subdiv=<default>);
-triple nextnormal(triple p, triple q);
 real eps;
-triple[] firstframe(path3 p, triple optional=<default>);
 FitControl defaultControl;
-void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gtol, int maxfev, real epsfcn, real[] diag, int mode, real factor, lm_int_type info, lm_int_type nfev, real[] fjac, int[] ipvt, real[] qtf, real[] wa1, real[] wa2, real[] wa3, real[] wa4, void evaluate(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info), void printout(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev), lm_data_type data);
 void lm_lmpar(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] qtb, real delta, lm_real_type par, real[] x, real[] sdiag, real[] wa1, real[] wa2);
-void lm_qrsolv(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] qtb, real[] x, real[] sdiag, real[] wa);
+void lm_qrfac(int m, int n, real[] a, bool pivot, int[] ipvt, real[] rdiag, real[] acnorm, real[] wa);
 void lm_print_quiet(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev);
+void lm_print_default(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev);
 string pad(string str, int count, string pad=<default>);
 string pad(int num, int digits, string pad=<default>);
 string pad(real num, int digits, string pad=<default>);
-void lm_evaluate_default(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info);
-real LM_DWARF;
-real LM_MACHEP;
-void lm_qrfac(int m, int n, real[] a, bool pivot, int[] ipvt, real[] rdiag, real[] acnorm, real[] wa);
-real LM_SQRT_GIANT;
+real lm_enorm(int n, real[] x, int offset=<default>);
 real SQR(real x);
+void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gtol, int maxfev, real epsfcn, real[] diag, int mode, real factor, lm_int_type info, lm_int_type nfev, real[] fjac, int[] ipvt, real[] qtf, real[] wa1, real[] wa2, real[] wa3, real[] wa4, void evaluate(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info), void printout(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev), lm_data_type data);
 string[] lm_shortmsg;
-FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], real), real[] parameters, FitControl control=<default>);
-FitResult fit(real[] xdata, real[] ydata, real function(real[], real), real[] parameters, FitControl control=<default>);
 real LM_USERTOL;
+real LM_DWARF;
+real LM_MACHEP;
+string[] lm_infmsg;
+void lm_evaluate_default(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info);
 lm_data_type operator init();
 lm_int_type operator init();
 lm_real_type operator init();
@@ -3207,150 +3209,136 @@
 lm_control_type operator init();
 FitControl operator init();
 FitResult operator init();
-string[] lm_infmsg;
+void lm_minimize(int m_dat, int n_par, real[] par, void evaluate(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info), void printout(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev), lm_data_type data, lm_control_type control);
+void lm_qrsolv(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] qtb, real[] x, real[] sdiag, real[] wa);
+real LM_SQRT_GIANT;
 real LM_SQRT_DWARF;
-void lm_minimize(int m_dat, int n_par, real[] par, void evaluate(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info), void printout(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev), lm_data_type data, lm_control_type control);
-void lm_print_default(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev);
-real lm_enorm(int n, real[] x, int offset=<default>);
-marker TildeIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
-marker CircleBarIntervalMarker(int i=<default>, int n=<default>, real barsize=<default>, real radius=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, filltype filltype=<default>, bool circleabove=<default>, frame uniform=<default>, bool above=<default>);
+FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], real), real[] parameters, FitControl control=<default>);
+FitResult fit(real[] xdata, real[] ydata, real function(real[], real), real[] parameters, FitControl control=<default>);
+marker CrossIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
+marker StickIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
 void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, pair A, pair O, pair B, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
 real markanglespace(pen p=<default>);
 real markanglespace;
-real markangleradius(pen p=<default>);
-real markangleradius;
+frame crossframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
+real crossmarksize(pen p=<default>);
+real barmarksize(pen p=<default>);
+real barmarksizefactor;
+real circlemarkradiusfactor;
+frame tildeframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
+frame tildeframe;
+frame duplicate(path g, int n=<default>, pair space=<default>, pen p=<default>);
+void markinterval(picture pic=<default>, frame f, path g)(int n=<default>, frame f, bool rotated=<default>);
+marker CircleBarIntervalMarker(int i=<default>, int n=<default>, real barsize=<default>, real radius=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, filltype filltype=<default>, bool circleabove=<default>, frame uniform=<default>, bool above=<default>);
+real crossmarksizefactor;
+marker TildeIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
+real tildemarksize(pen p=<default>);
+real tildemarksizefactor;
 real markangleradiusfactor;
 real markanglespacefactor;
-real crossmarksize(pen p=<default>);
-real crossmarksizefactor;
-frame circlebarframe(int n=<default>, real barsize=<default>, real radius=<default>, real angle=<default>, pair offset=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-real circlemarkradius(pen p=<default>);
-real circlemarkradiusfactor;
+real stickmarksizefactor;
 frame stickframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
 frame stickframe;
-real stickmarkspace(pen p=<default>);
+real circlemarkradius(pen p=<default>);
+frame circlebarframe(int n=<default>, real barsize=<default>, real radius=<default>, real angle=<default>, pair offset=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
 real stickmarksize(pen p=<default>);
-real stickmarksizefactor;
 real stickmarkspacefactor;
-frame tildeframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
-frame tildeframe;
-real tildemarksizefactor;
-void markinterval(picture pic=<default>, frame f, path g)(int n=<default>, frame f, bool rotated=<default>);
-real tildemarksize(pen p=<default>);
-frame duplicate(path g, int n=<default>, pair space=<default>, pen p=<default>);
+real stickmarkspace(pen p=<default>);
+real markangleradius(pen p=<default>);
+real markangleradius;
 marker operator *(transform T, marker m);
-marker CrossIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
-frame crossframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
-marker StickIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
-real barmarksizefactor;
-real barmarksize(pen p=<default>);
-real findroot(real f(real), real a, real b, real tolerance=<default>, real fa=<default>, real fb=<default>);
+real[] leastsquares(real[][] A, real[] b, bool warn=<default>);
+pair[][] fft(pair[][] a, int sign=<default>);
+pair[] quarticroots(real a, real b, real c, real d, real e);
+real slope(path g, real x, int n=<default>);
+real slope(path g, explicit pair z, int n=<default>);
 real value(path g, real x, int n=<default>);
 real value(path g, explicit pair z, int n=<default>);
 real time(path g, real x, int n=<default>);
 real time(path g, explicit pair z, int n=<default>);
-string nopoint;
 real interpolate(real[] x, real[] y, real x0, int i);
 real interpolate(real[] x, real[] y, real x0);
-void drawline(picture pic=<default>, pair P, pair Q, pen p=<default>);
-bool square(real[][] m);
-real[] zero(int n);
-real[][] zero(int n, int m);
+bool rectangular(real[][] m);
+bool rectangular(pair[][] m);
+bool rectangular(triple[][] m);
 bool lexorder(pair a, pair b);
 bool lexorder(triple a, triple b);
 int unique(real[] a, real x);
 int unique(string[] a, string x);
-int[][] segment(bool[] b);
-int[][] segmentlimits(bool[] b);
-bool increasing(real[] a, bool strict=<default>);
 real[] partialsum(real[] a);
 real[] partialsum(real[] a, real[] dx);
 int[] partialsum(int[] a);
 int[] partialsum(int[] a, int[] dx);
-real acot(real x);
+picture grid(int Nx, int Ny, pen p=<default>);
+real frac(real x);
 real asec(real x);
 real acsc(real x);
 real sec(real x);
 real csc(real x);
+int quadrant(real degrees);
+int[][] segment(bool[] b);
 pair exp(explicit pair z);
-int quadrant(real degrees);
-pair[] quarticroots(real a, real b, real c, real d, real e);
-picture grid(int Nx, int Ny, pen p=<default>);
-real[] leastsquares(real[][] A, real[] b, bool warn=<default>);
+string nopoint;
+real cot(real x);
 pair log(explicit pair z);
-pair[][] fft(pair[][] a, int sign=<default>);
-real slope(path g, real x, int n=<default>);
-real slope(path g, explicit pair z, int n=<default>);
 triple intersectionpoint(triple n0, triple P0, triple n1, triple P1);
-pair unityroot(int n, int k=<default>);
-bool rectangular(real[][] m);
-bool rectangular(pair[][] m);
-bool rectangular(triple[][] m);
-real frac(real x);
+real[] zero(int n);
+real[][] zero(int n, int m);
+real findroot(real f(real), real a, real b, real tolerance=<default>, real fa=<default>, real fb=<default>);
+void drawline(picture pic=<default>, pair P, pair Q, pen p=<default>);
 rootfinder_settings operator init();
-bool polygon(path p);
-real cot(real x);
+real acot(real x);
 real intersect(pair p, pair q, pair z);
 real intersect(triple P, triple Q, triple n, triple Z);
+pair unityroot(int n, int k=<default>);
+int[][] segmentlimits(bool[] b);
+bool polygon(path p);
+bool increasing(real[] a, bool strict=<default>);
+bool square(real[][] m);
 path cuttings;
 path cutafter(path p, path q);
 path cutbefore(path p, path q);
-void draw(picture pic=<default>, obj o, light light=<default>);
 obj operator *(real[][] T, obj o);
 obj operator init();
-real[] solveBVP(real[] f(real, real[]), real a, real b=<default>, real h=<default>, int n=<default>, bool dynamic=<default>, real tolmin=<default>, real tolmax=<default>, real dtmin=<default>, real dtmax=<default>, RKTableau tableau, bool verbose=<default>, real[] initial(real[]), real[] discrepancy(real[]), real[] guess, int iterations=<default>);
+void draw(picture pic=<default>, obj o, light light=<default>);
+real[][] finiteDifferenceJacobian(real[] f(real[]), real[] t, real[] h=<default>);
 solution integrate(real y, real c=<default>, real f(real t, real y), real a, real b=<default>, real h=<default>, int n=<default>, bool dynamic=<default>, real tolmin=<default>, real tolmax=<default>, real dtmin=<default>, real dtmax=<default>, RKTableau tableau, bool verbose=<default>);
 Solution integrate(real[] y, real[] f(real t, real[] y), real a, real b=<default>, real h=<default>, int n=<default>, bool dynamic=<default>, real tolmin=<default>, real tolmax=<default>, real dtmin=<default>, real dtmax=<default>, RKTableau tableau, bool verbose=<default>);
 real adjust(real h, real error, real tolmin, real tolmax, RKTableau tableau);
-RKTableau RK5DP;
+real error(real error, real initial, real lowOrder, real norm, real diff);
+RKTableau RK5;
 RKTableau RK4;
-RKTableau E_RK3BS;
-RKTableau E_PC;
+RKTableau RK3BS;
+real[] newton(int iterations=<default>, real[] f(real[]), real[][] jacobian(real[]), real[] t);
+RKTableau RK2;
 RKTableau E_Euler;
-RKTableau Euler;
-void expfactors(real x, coefficients a);
 real phi1(real x);
 real[] Coeff;
 real stepfactor;
-real[][] finiteDifferenceJacobian(real[] f(real[]), real[] t, real[] h=<default>);
+real phi2(real x);
+RKTableau PC;
+RKTableau RK5DP;
+RKTableau E_PC;
 RKTableau E_RK2;
-real error(real error, real initial, real lowOrder, real norm, real diff);
-RKTableau RK5F;
 void report(real old, real h, real t);
-RKTableau PC;
-RKTableau RK2;
-real phi2(real x);
-real[] newton(int iterations=<default>, real[] f(real[]), real[][] jacobian(real[]), real[] t);
+RKTableau RK3;
 coefficients operator init();
 RKTableau operator init();
 solution operator init();
 Solution operator init();
-RKTableau RK5;
-RKTableau RK3BS;
-real phi3(real x);
 void write(solution S);
 void write(Solution S);
-RKTableau RK3;
+real phi3(real x);
+void expfactors(real x, coefficients a);
+RKTableau E_RK3BS;
+RKTableau Euler;
+real[] solveBVP(real[] f(real, real[]), real a, real b=<default>, real h=<default>, int n=<default>, bool dynamic=<default>, real tolmin=<default>, real tolmax=<default>, real dtmin=<default>, real dtmax=<default>, RKTableau tableau, bool verbose=<default>, real[] initial(real[]), real[] discrepancy(real[]), real[] guess, int iterations=<default>);
+RKTableau RK5F;
 pen[] cmyk(pen[] Palette);
-pen[] Gradient(int NColors=<default> ... pen[] p);
-void PaletteTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, pen pTick=<default>, pen ptick=<default>);
-void PaletteTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>);
-pen[] palette(real[] f, pen[] palette);
-pen[][] palette(real[][] f, pen[] palette);
-void palette(picture pic=<default>, Label L=<default>, bounds bounds, pair initial, pair final, void axis(picture, axisT)=<default>, pen[] palette, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>)=<default>, bool copy=<default>, bool antialias=<default>);
-pen[] adjust(picture pic, real min, real max, real rmin, real rmax, pen[] palette);
-bounds Automatic(picture pic, real min, real max);
-bounds Range(picture pic, real min, real max)(bool automin=<default>, real min=<default>, bool automax=<default>, real max=<default>);
-pen[] BWRainbow(int NColors, bool two);
-pen[] BWRainbow(int NColors=<default>);
-transform swap;
-void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>);
-real[] sequencereal;
 pen[] BWRainbow2(int NColors=<default>);
 pen[] Wheel(int NColors=<default>);
-pen[] Rainbow(int NColors=<default>);
-pen[] Grayscale(int NColors=<default>);
-bounds Full(picture pic, real min, real max);
+real[] sequencereal;
+pen[] adjust(picture pic, real min, real max, real rmin, real rmax, pen[] palette);
 void image(frame f, real[][] data, pair initial, pair final, pen[] palette, bool transpose=<default>, transform t=<default>, bool copy=<default>, bool antialias=<default>);
 void image(frame f, pen[][] data, pair initial, pair final, bool transpose=<default>, transform t=<default>, bool copy=<default>, bool antialias=<default>);
 bounds image(picture pic=<default>, real[][] f, bounds range(picture pic, real min, real max)=<default>, pair initial, pair final, pen[] palette, bool transpose=<default>, bool copy=<default>, bool antialias=<default>);
@@ -3359,156 +3347,192 @@
 void image(picture pic=<default>, pen f(int, int), int width, int height, pair initial, pair final, bool transpose=<default>, bool antialias=<default>);
 bounds image(picture pic=<default>, pair[] z, real[] f, bounds range(picture pic, real min, real max)=<default>, pen[] palette);
 bounds image(picture pic=<default>, real[] x, real[] y, real[] f, bounds range(picture pic, real min, real max)=<default>, pen[] palette);
+bounds Full(picture pic, real min, real max);
+bounds Automatic(picture pic, real min, real max);
+bounds Range(picture pic, real min, real max)(bool automin=<default>, real min=<default>, bool automax=<default>, real max=<default>);
+transform swap;
+void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>);
+pen[] Gradient(int NColors=<default> ... pen[] p);
 pen[] quantize(pen[] Palette, int n);
+pen[] Grayscale(int NColors=<default>);
+pen[] BWRainbow(int NColors, bool two);
+pen[] BWRainbow(int NColors=<default>);
+pen[] palette(real[] f, pen[] palette);
+pen[][] palette(real[][] f, pen[] palette);
+void palette(picture pic=<default>, Label L=<default>, bounds bounds, pair initial, pair final, void axis(picture, axisT)=<default>, pen[] palette, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>)=<default>, bool copy=<default>, bool antialias=<default>);
+void PaletteTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, pen pTick=<default>, pen ptick=<default>);
+void PaletteTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign=<default>);
+pen[] Rainbow(int NColors=<default>);
+picture crosshatch(real H=<default>, pen p=<default>);
 picture hatch(real H=<default>, pair dir=<default>, pen p=<default>);
+real hatchepsilon;
 picture checker(real Hx=<default>, real Hy=<default>, pen p=<default>);
 picture tile(real Hx=<default>, real Hy=<default>, pen p=<default>, filltype filltype=<default>);
+picture brick(real Hx=<default>, real Hy=<default>, pen p=<default>);
 frame tiling(string name, picture pic, pair lb=<default>, pair rt=<default>);
-picture crosshatch(real H=<default>, pen p=<default>);
-picture brick(real Hx=<default>, real Hy=<default>, pen p=<default>);
 void add(string name, picture pic, pair lb=<default>, pair rt=<default>);
-real hatchepsilon;
+void grestore(picture pic=<default>);
+pen textpen;
 void gsave(picture pic=<default>);
-pen textpen;
-void grestore(picture pic=<default>);
 pair align;
+rational sum(rational[] a);
+bool rectangular(rational[][] m);
+bool operator >(rational r, rational s);
+bool operator <(rational r, rational s);
+rational operator /(rational r, rational s);
+rational abs(rational r);
+int lcm(int m, int n);
+bool operator >=(rational r, rational s);
+rational operator +(rational r, rational s);
+rational operator init();
+rational min(rational a, rational b);
+rational operator -(rational r);
+rational operator -(rational r, rational s);
+rational max(rational a, rational b);
+rational max(rational[] a);
+rational operator cast(int p);
+rational[] operator cast(int[] a);
+rational[][] operator cast(int[][] a);
+void write(string s=<default>, rational r, void suffix(file)=<default>);
+void write(string s=<default>, rational[] a, void suffix(file)=<default>);
+void write(string s=<default>, rational[][] a, void suffix(file)=<default>);
+int gcd(int m, int n);
+bool operator ==(rational r, rational s);
+bool[] operator ==(rational[] r, rational s);
+bool operator ==(rational[] r, rational[] s);
+bool operator ==(rational[][] r, rational[][] s);
+bool operator <=(rational r, rational s);
+real operator ecast(rational r);
+rational operator *(rational r, rational s);
 path roundedpath(path A, real R, real S=<default>);
 real infinity;
 problem operator init();
 void bibliography(string name);
-void bibliographystyle(string name);
+void subitem(string s, pen p=<default>);
 void item(string s, pen p=<default>, bool step=<default>);
+void asyfilecode(bool center=<default>, string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
+void asyfigure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, filltype filltype=<default>, bool newslide=<default>);
 void filecode(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
-void indexedfigure(string prefix, int first, int last, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool step=<default>);
+void code(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
+string cropcode(string s);
+void asyinclude(string s, real xsize=<default>, real ysize=<default>);
+string[] codefile;
+void figure(string[] s, string options=<default>, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void figure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void display(frame[] f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void display(frame f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void display(string[] s, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void display(string s, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void equation(string s, pen p=<default>);
+void vbox(string s, pen p=<default>);
+void remark(bool center=<default>, string s, pair align=<default>, pen p=<default>, real indent=<default>, bool minipage=<default>, real skip=<default>, filltype filltype=<default>, bool step=<default>);
 void outline(string s=<default>, pair position=<default>, pair align=<default>, pen p=<default>);
-void incrementposition(pair z);
+void erasestep(int erasenode);
 bool checkposition();
-void newslide(bool stepping=<default>);
-void titlepage(string title, string author, string institution=<default>, string date=<default>, string url=<default>, bool newslide=<default>);
 void nextpage(pen p=<default>);
-void numberpage(pen p=<default>);
 void reversevideo();
-string texcolor(pen p);
+void color(string name, string color);
+bool empty();
+void setpens(pen red=<default>, pen blue=<default>, pen steppen=<default>);
 int preamblenodes;
-bool havepagenumber;
 int page;
-int[] lastnode;
-pair startposition;
+int[] firstnode;
 pair titlepageposition;
-void color(string name, string color);
 pen foregroundcolor;
 pen backgroundcolor;
 pen figuremattpen;
-real figureborder;
-pen steppagenumberpen;
-pen pagenumberpen;
-real titleskip;
-pen titlepen;
+pair pagenumberposition;
+string newbulletcolor;
+void skip(real n=<default>);
+string oldbulletcolor;
 pair titlealign;
-pair urlskip;
 pair dateskip;
-real codeskip;
 real itemskip;
-pen urlpen;
 pen datepen;
-pen authorpen;
+pen institutionpen;
 pen titlepagepen;
-pen itempen;
-string bulletcolor(string color);
-real minipagewidth;
-bool landscape;
+pen codepen;
+pair urlskip;
+transform tinv;
+picture background;
+void background();
 real pageheight;
 real pagewidth;
-real pagemargin;
+void indexedfigure(string prefix, int first, int last, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool step=<default>);
+void equations(string s, pen p=<default>);
+pen titlepen;
+string bulletcolor(string color);
+real minipagemargin;
+void incrementposition(pair z);
 bool allowstepping;
-bool itemstep;
-bool empty();
-string[] codefile;
-void subitem(string s, pen p=<default>);
-void setpens(pen red=<default>, pen blue=<default>, pen steppen=<default>);
-bool firststep;
-void remark(bool center=<default>, string s, pair align=<default>, pen p=<default>, real indent=<default>, bool minipage=<default>, real skip=<default>, filltype filltype=<default>, bool step=<default>);
-void usersetting();
-pen institutionpen;
-void title(string s, pair position=<default>, pair align=<default>, pen p=<default>, bool newslide=<default>);
-void asyfilecode(bool center=<default>, string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
+void newslide(bool stepping=<default>);
 void center(string s, pen p=<default>);
-pair currentposition;
+real titleskip;
+bool stepping;
+pen urlpen;
+pen steppagenumberpen;
 void currentexitfunction();
-void skip(real n=<default>);
-void exitfunction();
 void step();
-pair pagenumberposition;
-int[] firstnode;
-real minipagemargin;
+pair startposition;
+pair currentposition;
+void titlepage(string title, string author, string institution=<default>, string date=<default>, string url=<default>, bool newslide=<default>);
+void asycode(bool center=<default>, string s, string options=<default>, string caption=<default>, string preamble=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
+pen itempen;
+string asywrite(string s, string preamble=<default>);
 bool reverse;
-void asyinclude(string s, real xsize=<default>, real ysize=<default>);
-void vbox(string s, pen p=<default>);
+void numberpage(pen p=<default>);
+bool firststep;
+bool landscape;
+real figureborder;
 string bullet;
-string oldbulletcolor;
-void figure(string[] s, string options=<default>, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void figure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void asyfigure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, filltype filltype=<default>, bool newslide=<default>);
-void display(frame[] f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void display(frame f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void display(string[] s, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void display(string s, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void equation(string s, pen p=<default>);
-void asycode(bool center=<default>, string s, string options=<default>, string caption=<default>, string preamble=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
-picture background;
-void background();
+void normalvideo();
+real codeskip;
 void multifigure(string[] slist, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool step=<default>);
-void erasestep(int erasenode);
-void code(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
-transform tinv;
+bool itemstep;
+pen pagenumberpen;
+int[] lastnode;
+void usersetting();
+real aboveequationskip;
+real minipagewidth;
+void bibliographystyle(string name);
+real pagemargin;
+string texcolor(pen p);
+void title(string s, pair position=<default>, pair align=<default>, pen p=<default>, bool newslide=<default>);
+pen authorpen;
 pair pagenumberalign;
-pen codepen;
-void equations(string s, pen p=<default>);
-string cropcode(string s);
-string newbulletcolor;
-bool stepping;
-string asywrite(string s, string preamble=<default>);
-void normalvideo();
+bool havepagenumber;
+void exitfunction();
+picture slopefield(real f(real, real), pair a, pair b, int nx=<default>, int ny=<default>, real tickfactor=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
+picture slopefield(real f(real), pair a, pair b, int nx=<default>, int ny=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
 path curve(pair c, real f(real, real), pair a, pair b);
 path curve(pair c, real f(real), pair a, pair b);
 real stepfraction;
-picture slopefield(real f(real, real), pair a, pair b, int nx=<default>, int ny=<default>, real tickfactor=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
-picture slopefield(real f(real), pair a, pair b, int nx=<default>, int ny=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>);
-evaluatedpoint[][][] make3dgrid(triple a, triple b, int nx, int ny, int nz, real f(triple), bool allowzero=<default>);
+surface implicitsurface(real f(triple)=<default>, real ff(real, real, real)=<default>, triple a, triple b, int n=<default>, bool keyword overlapedges=<default>, int keyword nx=<default>, int keyword ny=<default>, int keyword nz=<default>, int keyword maxdepth=<default>, bool keyword usetriangles=<default>);
+evaluatedpoint[][] slice(evaluatedpoint[][] a, int start1, int end1, int start2, int end2);
+evaluatedpoint[][][] slice(evaluatedpoint[][][] a, int start1, int end1, int start2, int end2, int start3, int end3);
+positionedvector[][] slice(positionedvector[][] a, int start1, int end1, int start2, int end2);
+positionedvector[][][] slice(positionedvector[][][] a, int start1, int end1, int start2, int end2, int start3, int end3);
 triple nGrad(triple)(real f(triple));
 patch[] quadpatches(path3 edgecycle, positionedvector[] corners, real f(triple), triple grad(triple), triple a, triple b, bool usetriangles);
 bool checkpt(triple testpt, real f(triple), triple grad(triple), triple a, triple b);
-patch[] maketriangle(path3 external, real f(triple), triple grad(triple), bool allowsubdivide=<default>);
+bool checkptincube(triple pt, triple a, triple b);
+bool check_fpt_zero(triple testpoint, real f(triple), triple grad(triple));
 patch[] triangletoquads(path3 external, real f(triple), triple grad(triple), triple a, triple b);
 triple normalout(int face);
-path3 pathinface(positionedvector v1, positionedvector v2, triple facenorm, triple edge1normout, triple edge2normout);
-path3 pathinface(positionedvector v1, positionedvector v2, int face, int edge1face, int edge2face);
-real[] projecttospan_findcoeffs(triple toproject, triple v1, triple v2, bool warn=<default>);
-real angledegrees(triple a, triple b);
-int[] makecircle(edge[] edges);
-int YLOW;
-int XLOW;
-patch trianglewithnormals(path3 external, triple n1, triple n2, triple n3);
-real(real)[] bernstein;
-int ZHIGH;
-int NULL_VERTEX;
 path3 bisector(path3 edgecycle, int[] savevertices);
+triple projecttospan(triple toproject, triple v1, triple v2, real mincoeff=<default>);
+int YHIGH;
 int XHIGH;
-int YHIGH;
-evaluatedpoint[][] slice(evaluatedpoint[][] a, int start1, int end1, int start2, int end2);
-evaluatedpoint[][][] slice(evaluatedpoint[][][] a, int start1, int end1, int start2, int end2, int start3, int end3);
-positionedvector[][] slice(positionedvector[][] a, int start1, int end1, int start2, int end2);
-positionedvector[][][] slice(positionedvector[][][] a, int start1, int end1, int start2, int end2, int start3, int end3);
-real B33(real t);
-bool checkptincube(triple pt, triple a, triple b);
+int NULL_VERTEX;
+patch trianglewithnormals(path3 external, triple n1, triple n2, triple n3);
 patch patchwithnormals(path3 external, triple[] u0normals, triple[] u1normals, triple[] v0normals, triple[] v1normals);
 patch patchwithnormals(path3 external, triple normalat(triple));
-path3 pathbetween(positionedvector v1, positionedvector v2);
-path3 pathbetween(path3 edgecycle, int vertex1, int vertex2);
-bool check_fpt_zero(triple testpoint, real f(triple), triple grad(triple));
-triple projecttospan(triple toproject, triple v1, triple v2, real mincoeff=<default>);
-int ZLOW;
+real(real)[] bernstein;
+real B23(real t);
+real B13(real t);
+real B03(real t);
 bool operator ==(edge a, edge b);
+real B33(real t);
 pathwithnormals_settings operator init();
 intset operator init();
 int_to_intset operator init();
@@ -3516,299 +3540,308 @@
 positionedvector operator init();
 evaluatedpoint operator init();
 gridwithzeros operator init();
-real B13(real t);
-surface implicitsurface(real f(triple)=<default>, real ff(real, real, real)=<default>, triple a, triple b, int n=<default>, bool keyword overlapedges=<default>, int keyword nx=<default>, int keyword ny=<default>, int keyword nz=<default>, int keyword maxdepth=<default>, bool keyword usetriangles=<default>);
 string operator cast(edge e);
 string operator cast(edge[] edges);
 string operator cast(positionedvector vv);
 triple operator cast(evaluatedpoint p);
-real B23(real t);
-real B03(real t);
-revolution sphere(triple c=<default>, real r, int n=<default>);
-real[] tangent(path p, path q, bool side);
+real[] projecttospan_findcoeffs(triple toproject, triple v1, triple v2, bool warn=<default>);
+int YLOW;
+int ZLOW;
+int ZHIGH;
+real angledegrees(triple a, triple b);
+path3 pathbetween(positionedvector v1, positionedvector v2);
+path3 pathbetween(path3 edgecycle, int vertex1, int vertex2);
+patch[] maketriangle(path3 external, real f(triple), triple grad(triple), bool allowsubdivide=<default>);
+path3 pathinface(positionedvector v1, positionedvector v2, triple facenorm, triple edge1normout, triple edge2normout);
+path3 pathinface(positionedvector v1, positionedvector v2, int face, int edge1face, int edge2face);
+evaluatedpoint[][][] make3dgrid(triple a, triple b, int nx, int ny, int nz, real f(triple), bool allowzero=<default>);
+int XLOW;
+int[] makecircle(edge[] edges);
+path[] cylinder(path3 base, real h, triple axis=<default>, projection P);
+revolution cylinder(triple c=<default>, real r, real h, triple axis=<default>);
+path line(path p, path q, real[] t);
 pen defaultbackpen;
 revolution cone(triple c=<default>, real r, real h, triple axis=<default>, int n=<default>);
+revolution operator *(real[][] t, revolution r);
+revolution sphere(triple c=<default>, real r, int n=<default>);
 void draw(picture pic=<default>, revolution r, int m=<default>, int n=<default>, pen frontpen=<default>, pen backpen=<default>, pen longitudinalpen=<default>, pen longitudinalbackpen=<default>, light light=<default>, string name=<default>, render render=<default>, projection P=<default>);
-revolution operator *(real[][] t, revolution r);
-path[] cylinder(path3 base, real h, triple axis=<default>, projection P);
-revolution cylinder(triple c=<default>, real r, real h, triple axis=<default>);
-path line(path p, path q, real[] t);
 skeleton operator init();
 revolution operator init();
+real[] tangent(path p, path q, bool side);
 surface surface(revolution r, int n=<default>, pen color(int i, real j)=<default>);
+linefit leastsquares(real[] x, real[] y);
+real Gaussrand();
 pair Gaussrandpair();
-void histogram(picture pic=<default>, real[] bins, real[] count, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
-void histogram(picture pic=<default>, real[] data, real a, real b, int n, bool normalize=<default>, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
-path topbox(pair a, pair b);
-path halfbox(pair a, pair b);
 int[] frequency(real[] data, real[] bins);
 int[] frequency(real[] data, real a, real b, int n);
 int[][] frequency(real[] x, real[] y, real[] xbins, real[] ybins);
 int[][] frequency(real[] x, real[] y, pair a, pair b, int nx, int ny=<default>);
 int[][] frequency(pair[] z, pair a, pair b, int nx, int ny=<default>);
-real Gaussian(real x, real sigma);
-real Gaussian(real x);
-real kurtosisexcess(real[] A);
 real kurtosis(real[] A);
-real rms(real[] A);
+real stdev(real[] A);
 real variancebiased(real[] A);
-real stdev(real[] A);
 real variance(real[] A);
 real legendmarkersize;
+real rms(real[] A);
+void histogram(picture pic=<default>, real[] bins, real[] count, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
+void histogram(picture pic=<default>, real[] data, real a, real b, int n, bool normalize=<default>, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
+real kurtosisexcess(real[] A);
+real Gaussian(real x, real sigma);
+real Gaussian(real x);
+linefit operator init();
+int bins(real[] data, int max=<default>);
+real skewness(real[] A);
+path topbox(pair a, pair b);
+path halfbox(pair a, pair b);
 real mean(real[] A);
-real skewness(real[] A);
-linefit leastsquares(real[] x, real[] y);
-int bins(real[] data, int max=<default>);
-real Gaussrand();
-linefit operator init();
-Relation r4b;
 Relation r4a;
-Relation r3;
 picture tableau(frame[] cards, bool number=<default>);
 Braid apply(Relation r, Braid b, int step, int place);
+Component wye;
+Component phi;
+Component bm;
 real gapfactor;
-real hwratio;
-Component bp;
-Relation operator -(Relation r);
-Component phi;
-pair max(pair[] z);
 pair[] endpoints(guide[] a);
+Relation r4b;
 Component operator init();
 Braid operator init();
 Relation operator init();
 Syzygy operator init();
-Component bm;
-Component wye;
 pair min(pair[] z);
+real hwratio;
+Component bp;
+Relation operator -(Relation r);
+pair max(pair[] z);
+Relation r3;
 pen Tan;
+pen Brown;
 pen OliveGreen;
-pen LimeGreen;
+pen SeaGreen;
+pen JungleGreen;
 pen BlueGreen;
-pen Aquamarine;
-pen TealBlue;
-pen Turquoise;
-pen SkyBlue;
 pen NavyBlue;
-pen CornflowerBlue;
-pen Periwinkle;
+pen CadetBlue;
+pen BlueViolet;
 pen RoyalPurple;
 pen Plum;
-pen White;
-pen Purple;
 pen DarkOrchid;
 pen Lavender;
-pen Mulberry;
+pen Fuchsia;
+pen Rhodamine;
 pen CarnationPink;
+pen Gray;
 pen Salmon;
+pen RubineRed;
 pen OrangeRed;
-pen Red;
 pen BrickRed;
-pen YellowOrange;
-pen Apricot;
+pen Maroon;
+pen Mahogany;
+pen BurntOrange;
+pen Melon;
+pen Dandelion;
 pen Goldenrod;
 pen GreenYellow;
+pen Peach;
+pen VioletRed;
+pen Cerulean;
+pen White;
+pen Yellow;
+pen PineGreen;
 pen RedViolet;
+pen Red;
+pen Magenta;
+pen Turquoise;
+pen MidnightBlue;
+pen ProcessBlue;
+pen Black;
 pen Bittersweet;
-pen VioletRed;
-pen Violet;
-pen Sepia;
-pen Mahogany;
-pen RubineRed;
-pen WildStrawberry;
-pen Black;
+pen SkyBlue;
+pen Aquamarine;
+pen Orchid;
 pen RawSienna;
 pen Thistle;
-pen Blue;
-pen Maroon;
-pen Yellow;
-pen SeaGreen;
-pen Rhodamine;
-pen Fuchsia;
+pen SpringGreen;
+pen Periwinkle;
+pen Sepia;
+pen TealBlue;
+pen LimeGreen;
 pen YellowGreen;
-pen Green;
+pen Violet;
 pen ForestGreen;
-pen Cerulean;
+pen Mulberry;
 pen Cyan;
-pen PineGreen;
-pen Dandelion;
-pen BlueViolet;
+pen Blue;
+pen Orange;
+pen CornflowerBlue;
+pen Emerald;
+pen WildStrawberry;
 pen RedOrange;
-pen CadetBlue;
-pen Orchid;
-pen Magenta;
-pen Emerald;
-pen JungleGreen;
-pen SpringGreen;
-pen BurntOrange;
-pen Gray;
-pen Brown;
-pen MidnightBlue;
-pen Orange;
-pen ProcessBlue;
 pen RoyalBlue;
-pen Melon;
-pen Peach;
+pen Apricot;
+pen Purple;
+pen YellowOrange;
+pen Green;
 int lookup(tree t, int key);
 bool contains(tree t, int key);
-tree newtree();
 tree add(tree t, int key, int value);
 tree operator init();
 void write(file out=<default>, tree t);
-real trembleRandom;
-real magneticRadius;
-real trembleAngle;
+tree newtree();
 real trembleFrequency;
 real trembleFuzz();
+real magneticRadius;
 tremble operator init();
-int coloredSegments;
+real trembleRandom;
+real trembleAngle;
+real degrees(rmf a, rmf b);
+int coloredNodes;
 path3 roundedpath(path3 A, real r);
+coloredpath operator cast(path p);
+coloredpath operator cast(guide p);
 surface tube(path3 g, coloredpath section, transform T(real)=<default>, real corner=<default>, real relstep=<default>);
+coloredpath operator init();
+real[] sample(path3 g, real r, real relstep=<default>);
 surface surface(rmf[] R, real[] t, coloredpath cp, transform T(real), bool cyclic);
-int coloredNodes;
-real degrees(rmf a, rmf b);
-real[] sample(path3 g, real r, real relstep=<default>);
-coloredpath operator init();
-coloredpath operator cast(path p);
-coloredpath operator cast(guide p);
+int coloredSegments;
 string VERSION;
-pen Turquoise;
-pen Teal;
+pen Tomato;
 pen Tan;
-pen SkyBlue;
-pen Silver;
-pen Seashell;
-pen SaddleBrown;
-pen White;
-pen Purple;
+pen Snow;
+pen Sienna;
+pen SeaGreen;
+pen RosyBrown;
 pen PowderBlue;
 pen Plum;
-pen Red;
 pen Pink;
-pen PeachPuff;
-pen PapayaWhip;
+pen PaleVioletRed;
 pen PaleTurquoise;
-pen PaleGreen;
 pen OrangeRed;
-pen OliveDrab;
 pen OldLace;
-pen Salmon;
+pen Navy;
+pen NavajoWhite;
 pen Moccasin;
+pen MistyRose;
 pen MintCream;
-pen MediumTurquoise;
-pen MediumSpringGreen;
-pen MediumSlateBlue;
-pen MediumSeaGreen;
-pen MediumPurple;
-pen MediumBlue;
-pen MediumAquamarine;
-pen LimeGreen;
+pen Maroon;
 pen LightYellow;
+pen LightSlateGray;
 pen LightSkyBlue;
-pen LightSeaGreen;
-pen PaleGoldenrod;
 pen LightSalmon;
 pen LightPink;
-pen LightGrey;
 pen LightGreen;
-pen LightCyan;
-pen LightBlue;
 pen LemonChiffon;
+pen LawnGreen;
 pen Lavender;
-pen Indigo;
-pen IndianRed;
+pen Khaki;
 pen HotPink;
 pen Honeydew;
 pen GreenYellow;
+pen Salmon;
+pen SaddleBrown;
+pen Gray;
+pen IndianRed;
 pen Goldenrod;
-pen Sienna;
-pen Gold;
-pen Gainsboro;
-pen FloralWhite;
-pen FireBrick;
-pen DodgerBlue;
-pen DarkViolet;
-pen DarkTurquoise;
+pen Fuchsia;
+pen DimGray;
+pen DeepSkyBlue;
+pen DeepPink;
 pen DarkSlateGray;
-pen DarkSeaGreen;
+pen DarkSalmon;
 pen DarkOrchid;
 pen DarkOrange;
-pen Navy;
-pen LightSlateGray;
 pen DarkOliveGreen;
 pen DarkMagenta;
-pen Tomato;
-pen DarkKhaki;
 pen DarkGreen;
-pen DarkGray;
-pen DarkCyan;
+pen DarkGoldenrod;
+pen DarkBlue;
 pen Crimson;
 pen Cornsilk;
-pen LightSteelBlue;
-pen CornflowerBlue;
-pen Chocolate;
-pen Chartreuse;
+pen Coral;
+pen PapayaWhip;
+pen CadetBlue;
 pen BurlyWood;
+pen LightCoral;
+pen Brown;
+pen BlueViolet;
+pen Beige;
 pen Azure;
-pen Aquamarine;
-pen NavajoWhite;
-pen SlateGray;
-pen Violet;
-pen DarkBlue;
-pen RosyBrown;
-pen Olive;
-pen DeepSkyBlue;
-pen Snow;
-pen BlanchedAlmond;
-pen LavenderBlush;
-pen Black;
-pen Bisque;
-pen DarkGoldenrod;
-pen Thistle;
-pen DarkRed;
-pen Khaki;
-pen Blue;
-pen Maroon;
+pen Indigo;
+pen SlateBlue;
+pen OliveDrab;
+pen DarkKhaki;
+pen Peru;
+pen PeachPuff;
+pen Lime;
+pen LightGoldenrodYellow;
+pen DarkSeaGreen;
+pen MidnightBlue;
+pen White;
 pen Yellow;
-pen DeepPink;
-pen Fuchsia;
-pen Lime;
+pen LightCyan;
+pen GhostWhite;
+pen Ivory;
+pen Red;
+pen Magenta;
+pen LightSeaGreen;
+pen DarkViolet;
+pen Turquoise;
 pen AntiqueWhite;
-pen DimGray;
-pen MistyRose;
+pen WhiteSmoke;
+pen Bisque;
+pen PaleGreen;
+pen PaleGoldenrod;
+pen Black;
+pen SkyBlue;
+pen LightBlue;
 pen ForestGreen;
-pen Green;
+pen LightGrey;
+pen AliceBlue;
 pen Orchid;
+pen SandyBrown;
+pen LavenderBlush;
+pen Thistle;
+pen MediumVioletRed;
+pen FloralWhite;
+pen BlanchedAlmond;
+pen Linen;
+pen Olive;
+pen SpringGreen;
+pen LimeGreen;
+pen FireBrick;
+pen Gold;
+pen YellowGreen;
+pen MediumSpringGreen;
 pen SteelBlue;
-pen DarkSalmon;
-pen SeaGreen;
-pen Peru;
-pen AliceBlue;
-pen Cyan;
-pen BlueViolet;
-pen CadetBlue;
-pen Magenta;
 pen Aqua;
-pen GhostWhite;
-pen MediumOrchid;
-pen YellowGreen;
-pen WhiteSmoke;
-pen LawnGreen;
-pen Brown;
-pen SpringGreen;
-pen Beige;
-pen Coral;
-pen LightCoral;
-pen PaleVioletRed;
-pen Gray;
-pen MidnightBlue;
+pen Violet;
 pen rgbint(int r, int g, int b);
-pen SlateBlue;
-pen Ivory;
+pen Cyan;
+pen Blue;
+pen Teal;
+pen MediumBlue;
+pen Chartreuse;
+pen DarkSlateBlue;
+pen SlateGray;
+pen Wheat;
 pen Orange;
+pen CornflowerBlue;
+pen Seashell;
+pen DarkGray;
+pen MediumOrchid;
+pen Chocolate;
+pen MediumPurple;
+pen DodgerBlue;
+pen DarkRed;
+pen DarkCyan;
+pen MediumSeaGreen;
+pen MediumSlateBlue;
 pen RoyalBlue;
-pen DarkSlateBlue;
-pen MediumVioletRed;
-pen Wheat;
-pen SandyBrown;
-pen Linen;
-pen LightGoldenrodYellow;
+pen Silver;
+pen MediumAquamarine;
+pen Purple;
+pen MediumTurquoise;
+pen DarkTurquoise;
+pen LightSteelBlue;
+pen Green;
+pen Gainsboro;
+pen Aquamarine;

Modified: trunk/Build/source/utils/asymptote/asymptote.nsi
===================================================================
--- trunk/Build/source/utils/asymptote/asymptote.nsi	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/asymptote.nsi	2018-04-03 22:35:04 UTC (rev 47274)
@@ -65,7 +65,7 @@
 
 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
 OutFile "asymptote-${PRODUCT_VERSION}-setup.exe"
-InstallDir "$PROGRAMFILES\Asymptote"
+InstallDir "$PROGRAMFILES64\Asymptote"
 InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
 ShowInstDetails show
 ShowUnInstDetails show
@@ -73,9 +73,6 @@
 Section "Asymptote" SEC01
   SetOutPath "$INSTDIR"
   ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR"
-  Delete "$INSTDIR\_imagingtk.pyd"
-  Delete "$INSTDIR\opengl32.dll"
-  Delete "$INSTDIR\glu32.dll"
   SetOverwrite try
   File /r build-${PRODUCT_VERSION}\*
 

Modified: trunk/Build/source/utils/asymptote/asymptote.spec
===================================================================
--- trunk/Build/source/utils/asymptote/asymptote.spec	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/asymptote.spec	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,7 +1,7 @@
 %{!?_texmf: %global _texmf %(eval "echo `kpsewhich -expand-var '$TEXMFLOCAL'`")}
 
 Name:           asymptote
-Version:        2.41
+Version:        2.42
 Release:        1%{?dist}
 Summary:        Descriptive vector graphics language
 

Modified: trunk/Build/source/utils/asymptote/base/geometry.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/geometry.asy	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/base/geometry.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1296,7 +1296,7 @@
    relative to the path z--z + dir.
    dir(45 + n * 90), where n in N*, are common values for 'align'.</documentation></function></asyxml>*/
   p = squarecap + miterjoin + p;
-  if(size == 0) size = perpfactor * 3mm + sqrt(1 + linewidth(p)) - 1;
+  if(size == 0) size = perpfactor * 3mm + linewidth(p) / 2;
   frame apic;
   pair d1 = size * align * unit(dir) * dir(-45);
   pair d2 = I * d1;

Modified: trunk/Build/source/utils/asymptote/base/ode.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/ode.asy	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/base/ode.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -264,7 +264,7 @@
 {
   solution S;
   S.t=new real[] {a};
-  S.y=new real[]{y};
+  S.y=new real[] {y};
 
   if(h == 0) {
     if(b == a) return S;
@@ -323,6 +323,7 @@
     } else {
       t += h;
       y=y0+highOrder;
+      S.t.push(t);
       S.y.push(y);
     }
   }

Modified: trunk/Build/source/utils/asymptote/base/plain_Label.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_Label.asy	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/base/plain_Label.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,7 +1,7 @@
 real angle(transform t)
 {
   pair z=(2t.xx*t.yy,t.yx*t.yy-t.xx*t.xy);
-  if(t.xx < 0) z=-z;
+  if(t.xx < 0 || t.yy < 0) z=-z;
   return degrees(z,warn=false);
 }
 

Modified: trunk/Build/source/utils/asymptote/base/plain_strings.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_strings.asy	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/base/plain_strings.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -85,7 +85,7 @@
 
 // Split a string into an array of substrings delimited by delimiter
 // If delimiter is an empty string, use space delimiter but discard empty
-// substrings.
+// substrings. TODO: Move to C++ code.
 string[] split(string s, string delimiter="")
 {
   bool prune=false;
@@ -109,6 +109,27 @@
   return S;
 }
 
+// Returns an array of strings obtained by splitting s into individual
+// characters. TODO: Move to C++ code.
+string[] array(string s)
+{
+  int len=length(s);
+  string[] S=new string[len];
+  for(int i=0; i < len; ++i)
+    S[i]=substr(s,i,1);
+  return S;
+}
+
+// Concatenate an array of strings into a single string.
+// TODO: Move to C++ code.
+string operator +(...string[] a)
+{
+  string S;
+  for(string s : a)
+    S += s;
+  return S;
+}
+
 int system(string s) 
 {
   return system(split(s));
@@ -208,21 +229,12 @@
   w=stdin;
 }
 
-string math(real x)
+string format(string format=defaultformat, bool forcemath=false, real x,
+              string locale="")
 {
-  return math((string) x);
+  return format(format,forcemath,defaultseparator,x,locale);
 }
 
-string format(string format, real x, string locale="")
-{
-  return format(format,defaultseparator,x,locale);
-}
-
-string format(real x, string locale="")
-{
-  return format(defaultformat,defaultseparator,x,locale);
-}
-
 string phantom(string s)
 {
   return settings.tex != "none" ? "\phantom{"+s+"}" : "";

Added: trunk/Build/source/utils/asymptote/base/rational.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/rational.asy	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/base/rational.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,223 @@
+// Asymptote module implementing rational arithmetic.
+
+int gcd(int m, int n)
+{
+  if(m < n) {
+    int temp=m;
+    m=n;
+    n=temp;
+  }
+  while(n != 0) {
+    int r=m % n;
+    m=n;
+    n=r;
+  }       
+  return m;
+}
+
+int lcm(int m, int n)
+{
+  return m#gcd(m,n)*n;
+}
+
+struct rational {
+  int p=0,q=1;
+  void reduce() {
+    int d=gcd(p,q);
+    if(abs(d) > 1) {
+      p #= d;
+      q #= d;
+    }
+    if(q <= 0) {
+      if(q == 0) abort("Division by zero");
+      p=-p;
+      q=-q;
+    }
+  }
+  void operator init(int p=0, int q=1, bool reduce=true) {
+    this.p=p;
+    this.q=q;
+    if(reduce) reduce();
+  }
+}
+
+rational operator cast(int p) {
+  return rational(p,false);
+}
+
+rational[] operator cast(int[] a) {
+  return sequence(new rational(int i) {return a[i];},a.length);
+}
+
+rational[][] operator cast(int[][] a) {
+  return sequence(new rational[](int i) {return a[i];},a.length);
+}
+
+real operator ecast(rational r) {
+  return r.p/r.q;
+}
+
+rational operator -(rational r)
+{
+  return rational(-r.p,r.q,false);
+}
+
+rational operator +(rational r, rational s)
+{
+  return rational(r.p*s.q+s.p*r.q,r.q*s.q);
+}
+
+rational operator -(rational r, rational s)
+{
+  return rational(r.p*s.q-s.p*r.q,r.q*s.q);
+}
+
+rational operator *(rational r, rational s)
+{
+  return rational(r.p*s.p,r.q*s.q);
+}
+
+rational operator /(rational r, rational s)
+{
+  return rational(r.p*s.q,r.q*s.p);
+}
+
+bool operator ==(rational r, rational s)
+{
+  return r.p == s.p && r.q == s.q;
+}
+
+bool operator <(rational r, rational s)
+{
+  return r.p*s.q-s.p*r.q < 0;
+}
+
+bool operator >(rational r, rational s)
+{
+  return r.p*s.q-s.p*r.q > 0;
+}
+
+bool operator <=(rational r, rational s)
+{
+  return r.p*s.q-s.p*r.q <= 0;
+}
+
+bool operator >=(rational r, rational s)
+{
+  return r.p*s.q-s.p*r.q >= 0;
+}
+
+bool[] operator ==(rational[] r, rational s)
+{
+  return sequence(new bool(int i) {return r[i] == s;},r.length);
+}
+
+bool operator ==(rational[] r, rational[] s)
+{
+  if(r.length != s.length)
+    abort(" operation attempted on arrays of different lengths: "+
+          string(r.length)+" != "+string(s.length));
+  return all(sequence(new bool(int i) {return r[i] == s[i];},r.length));
+}
+
+bool operator ==(rational[][] r, rational[][] s)
+{
+  if(r.length != s.length)
+    abort(" operation attempted on arrays of different lengths: "+
+          string(r.length)+" != "+string(s.length));
+  return all(sequence(new bool(int i) {return r[i] == s[i];},r.length));
+}
+
+rational min(rational a, rational b)
+{
+  return a <= b ? a : b;
+}
+
+rational max(rational a, rational b)
+{
+  return a >= b ? a : b;
+}
+
+
+void write(string s="", rational r, suffix suffix=endl) {
+  if(r.q == 1)
+    write(s+string(r.p),suffix);
+  else
+    write(s+string(r.p)+"/"+string(r.q),suffix);
+}
+
+void write(string s="", rational[] a, suffix suffix=endl) {
+  if(s != "")
+    write(s);
+  for(int i=0; i < a.length; ++i) {
+    write(i,none);
+    write(':\t',a[i]);
+  }
+  write(suffix);
+}
+
+void write(string s="", rational[][] a, suffix suffix=endl) {
+  if(s != "")
+    write(s);
+  for(int i=0; i < a.length; ++i) {
+    rational[] ai=a[i];
+    for(int j=0; j < ai.length; ++j) {
+      write(ai[j],tab);
+    }
+    write();
+  }
+  write(suffix);
+}
+
+bool rectangular(rational[][] m)
+{
+  int n=m.length;
+  if(n > 0) {
+    int m0=m[0].length;
+    for(int i=1; i < n; ++i)
+      if(m[i].length != m0) return false;
+  }
+  return true;
+}
+
+rational sum(rational[] a)
+{
+  rational sum;
+  for(rational r:a)
+    sum += r;
+  return sum;
+}
+
+rational max(rational[] a)
+{
+  rational M=a[0];
+  for(rational r:a)
+    M=max(M,r);
+  return M;
+}
+
+rational abs(rational r)
+{
+  return rational(abs(r.p),r.q,false);
+}
+
+
+/*
+rational r=rational(1,3)+rational(1,4);
+write(r == rational(1,12));
+write(r);
+real x=r;
+write(x);
+
+rational r=3;
+write(r);
+
+write(gcd(-8,12));
+write(rational(-36,-14));
+
+int[][] a=new int[][] {{1,2},{3,4}};
+rational[][] r=a;
+write(r);
+
+*/
+

Modified: trunk/Build/source/utils/asymptote/base/slide.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/slide.asy	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/base/slide.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -43,6 +43,8 @@
 
 real itemskip=0.5;
 real codeskip=0.25;
+real aboveequationskip=-1.25;
+
 pair dateskip=(0,0.1);
 pair urlskip=(0,0.2);
 
@@ -165,6 +167,7 @@
 
 texpreamble(bulletcolor(newbulletcolor));
 texpreamble("\hyphenpenalty=10000\tolerance=1000");
+texpreamble("\usepackage{amsmath}");
 
 // Evaluate user command line option.
 void usersetting()
@@ -309,24 +312,29 @@
   remark("\center "+s,p);
 }
 
-void equation(string s, pen p=itempen)
+void vbox(string s, pen p=itempen)
 {
-  remark(center=true,"\vbox{$$"+s+"$$}",p,minipage=false,skip=0);
+  remark(center=true,"\vbox{"+s+"}",p,minipage=false,skip=0);
 }
 
-void vbox(string s, pen p=itempen)
+void skip(real n=1)
 {
-  remark(center=true,"\vbox{"+s+"}",p,minipage=false,skip=0);
+  incrementposition((0,(tinv*(-n*itemskip*I*lineskip(itempen)*pt)).y));
 }
 
-void equations(string s, pen p=itempen)
+void equation(string s, pen p=itempen)
 {
-  vbox("\begin{eqnarray*}"+s+"\end{eqnarray*}",p);
+  skip(aboveequationskip);
+  vbox("\begin{gather*}"+s+"\end{gather*}",p);
 }
 
-void skip(real n=1)
+void equations(string s, pen p=itempen)
 {
-  incrementposition((0,(tinv*(-n*itemskip*I*lineskip(itempen)*pt)).y));
+  skip(aboveequationskip);
+  if(find(s,"&") >= 0)
+    vbox("\begin{align*}"+s+"\end{align*}",p);
+  else
+    vbox("\begin{gather*}"+s+"\end{gather*}",p);
 }
 
 void display(frame[] f, real margin=0, pair align=S, pen p=itempen,

Modified: trunk/Build/source/utils/asymptote/bezierpatch.cc
===================================================================
--- trunk/Build/source/utils/asymptote/bezierpatch.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/bezierpatch.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -6,12 +6,17 @@
  *****/
 
 #include "bezierpatch.h"
+#include "predicates.h"
 
 namespace camp {
 
+using ::orient2d;
+using ::orient3d;
+
 size_t tstride;
-GLfloat *B;
 
+double viewpoint[3];
+
 #ifdef HAVE_GL
 
 std::vector<GLfloat> BezierPatch::buffer;
@@ -23,6 +28,41 @@
 std::vector<GLfloat> BezierPatch::tBuffer;
 std::vector<GLuint> BezierPatch::tIndices;
 
+std::vector<GLuint>& I=BezierPatch::tIndices;
+std::vector<GLfloat>& V=BezierPatch::tBuffer;
+bool colors;
+
+std::vector<GLfloat> zbuffer;
+std::vector<GLfloat> xbuffer;
+std::vector<GLfloat> ybuffer;
+
+std::vector<GLfloat> xmin,ymin,zmin;
+std::vector<GLfloat> xmax,ymax,zmax;
+std::vector<GLfloat> zsum;
+
+inline double min(double a, double b, double c)
+{
+  return min(min(a,b),c);
+}
+
+inline double max(double a, double b, double c)
+{
+  return max(max(a,b),c);
+}
+
+struct iz {
+  unsigned i;
+  double z;
+  iz() {}
+  void minimum(unsigned i, const std::vector<GLuint>& I) {
+    this->i=i;
+    unsigned i3=3*i;
+    z=min(zbuffer[I[i3]],zbuffer[I[i3+1]],zbuffer[I[i3+2]]);
+  }
+};
+
+std::vector<iz> IZ;
+
 GLuint BezierPatch::nvertices=0;
 GLuint BezierPatch::ntvertices=0;
 GLuint BezierPatch::Nvertices=0;
@@ -33,31 +73,235 @@
 const double FillFactor=0.1;
 const double BezierFactor=0.4;
 
-// Partially work around OpenGL transparency bug by sorting transparent
-// triangles by their centroid depth.
-int compare(const void *a, const void *b)
+inline int sgn1(double x) 
 {
-  size_t a0=tstride*((GLuint *) a)[0];
-  size_t a1=tstride*((GLuint *) a)[1];
-  size_t a2=tstride*((GLuint *) a)[2];
+  return x >= 0.0 ? 1 : -1;
+}
+
+inline int sgn(double x) 
+{
+  return (x > 0.0 ? 1 : (x < 0.0 ? -1 : 0));
+}
+
+bool sameside(const double *a, const double *b, int s0, const double *A,
+              const double *B, const double *C)
+{
+  if(sgn(orient2d(a,b,A)) == s0) return true;
+  if(sgn(orient2d(a,b,B)) == s0) return true;
+  if(sgn(orient2d(a,b,C)) == s0) return true;
+  return false;
+}
+
+// returns true iff 2D triangles abc and ABC intersect
+bool intersect2D(const double *a, const double *b, const double *c,
+                 const double *A, const double *B, const double *C)
+{
+  int s0=sgn(orient2d(a,b,c)); // Optimize away
+  int S0=sgn(orient2d(A,B,C)); // Optimize away
+  return
+    sameside(a,b,s0,A,B,C) &&
+    sameside(b,c,s0,A,B,C) &&
+    sameside(c,a,s0,A,B,C) &&
+    sameside(A,B,S0,a,b,c) &&
+    sameside(B,C,S0,a,b,c) &&
+    sameside(C,A,S0,a,b,c);
+}
+
+// returns true iff triangle abc is pierced by line segment AB.
+bool pierce(const double *a, const double *b, const double *c, const double *A, const double *B)
+{
+  int sa=sgn(orient3d(A,b,c,B));
+  int sb=sgn(orient3d(A,c,a,B));
+  int sc=sgn(orient3d(A,a,b,B));
+  return sa == sb && sb == sc; 
+}
+
+// returns true iff triangle abc is pierced by an edge of triangle ABC
+bool intersect0(const double *a, const double *b, const double *c,
+                const double *A, const double *B, const double *C,
+                int sA, int sB, int sC)
+{
+  if(sA != sB) {
+    if(pierce(a,b,c,A,B)) return true;
+    if(sC != sA) {
+      if(pierce(a,b,c,C,A)) return true;
+    } else {
+      if(pierce(a,b,c,B,C)) return true;
+    }
+  } else {
+    if(pierce(a,b,c,B,C)) return true;
+    if(pierce(a,b,c,C,A)) return true;
+  }
+  return false;
+}  
+
+// returns true iff triangle abc intersects triangle ABC
+bool intersect3D(const double *a, const double *b, const double *c,
+                 const double *A, const double *B, const double *C)
+{
+  int sA=sgn(orient3d(a,b,c,A));
+  int sB=sgn(orient3d(a,b,c,B));
+  int sC=sgn(orient3d(a,b,c,C));
+  if(sA == sB && sB == sC) return false;
+
+  int sa=sgn(orient3d(A,B,C,a));
+  int sb=sgn(orient3d(A,B,C,b));
+  int sc=sgn(orient3d(A,B,C,c));
+  if(sa == sb && sb == sc) return false;
+
+  return intersect0(a,b,c,A,B,C,sA,sB,sC) || intersect0(A,B,C,a,b,c,sa,sb,sc);
+}
+
+// Return the intersection time of the extension of the line segment PQ
+// with the plane perpendicular to n and passing through Z.
+inline double intersect(const double *P, const double *Q, const double *n,
+                        const double *Z)
+{
+  double d=n[0]*Z[0]+n[1]*Z[1]+n[2]*Z[2];
+  double denom=n[0]*(Q[0]-P[0])+n[1]*(Q[1]-P[1])+n[2]*(Q[2]-P[2]);
+  return denom == 0 ? DBL_MAX : (d-n[0]*P[0]-n[1]*P[1]-n[2]*P[2])/denom;
+}
+                    
+inline triple interp(const double *a, const double *b, double t)
+{
+  return triple(a[0]+t*(b[0]-a[0]),a[1]+t*(b[1]-a[1]),a[2]+t*(b[2]-a[2]));
+}
+
+inline void interp(GLfloat *dest,
+                   const GLfloat *a, const GLfloat *b, double t)
+{
+  double onemt=1.0-t;
+  for(size_t i=0; i < 4; ++i)
+    dest[i]=onemt*a[i]+t*b[i];
+}
+
+inline triple interp(const triple& a, const triple& b, double t)
+{
+  return a+(b-a)*t;
+}
+
+inline void cross(double *dest, const double *u, const double *v,
+                  const double *w)
+{
+  double u0=u[0]-w[0];
+  double u1=u[1]-w[1];
+  double u2=u[2]-w[2];
+  double v0=v[0]-w[0];
+  double v1=v[1]-w[1];
+  double v2=v[2]-w[2];
+  dest[0]=u1*v2-u2*v1;
+  dest[1]=u2*v0-u0*v2;
+  dest[2]=u0*v1-u1*v0;
+}
+
+unsigned n;
+unsigned int count;
+const size_t nbuffer=10000;
   
-  size_t b0=tstride*((GLuint *) b)[0];
-  size_t b1=tstride*((GLuint *) b)[1];
-  size_t b2=tstride*((GLuint *) b)[2];
+// Sort nonintersecting triangles by depth.
+int compare(const void *p, const void *P)
+{
+  unsigned Ia=((GLuint *) p)[0];
+  unsigned Ib=((GLuint *) p)[1];
+  unsigned Ic=((GLuint *) p)[2];
 
-  double x=
-    T[0]*(B[a0]+B[a1]+B[a2]-B[b0]-B[b1]-B[b2])+
-    T[1]*(B[a0+1]+B[a1+1]+B[a2+1]-B[b0+1]-B[b1+1]-B[b2+1])+
-    T[2]*(B[a0+2]+B[a1+2]+B[a2+2]-B[b0+2]-B[b1+2]-B[b2+2]);
-  if(x > 0.0) return 1;
-  if(x < 0.0) return -1;
-  return 0;
+  unsigned IA=((GLuint *) P)[0];
+  unsigned IB=((GLuint *) P)[1];
+  unsigned IC=((GLuint *) P)[2];
+  
+  return zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic] < 
+    zbuffer[IA]+zbuffer[IB]+zbuffer[IC] ? -1 : 1;
+  
+  /*
+  double a[]={xbuffer[Ia],ybuffer[Ia],zbuffer[Ia]};
+  double b[]={xbuffer[Ib],ybuffer[Ib],zbuffer[Ib]};
+  double c[]={xbuffer[Ic],ybuffer[Ic],zbuffer[Ic]};
+      
+  double A[]={xbuffer[IA],ybuffer[IA],zbuffer[IA]};
+  double B[]={xbuffer[IB],ybuffer[IB],zbuffer[IB]};
+  double C[]={xbuffer[IC],ybuffer[IC],zbuffer[IC]};
+
+  double viewpoint[]={0,0,100000};
+  
+  double sa=-orient3d(A,B,C,a);
+  double sb=-orient3d(A,B,C,b);
+  double sc=-orient3d(A,B,C,c);
+  double s=min(sa,sb,sc);
+  double S=max(sa,sb,sc);
+  double eps=1000;
+
+  if(s < -eps && S > eps) { //swap
+    double sA=-orient3d(a,b,c,A);
+    double sB=-orient3d(a,b,c,B);
+    double sC=-orient3d(a,b,c,C);
+    double s=min(sA,sB,sC);
+    double S=max(sA,sB,sC);
+    if(S < -s) S=s;
+    int sz=sgn1(orient3d(a,b,c,viewpoint));
+    if(S < -eps) return -sz;
+    if(S > eps) return sz;
+  }
+  if(S < -s) S=s;
+  int sz=sgn1(orient3d(A,B,C,viewpoint));
+  if(S < -eps) return sz;
+  if(S > eps) return -sz;
+  return a[2]+b[2]+c[2] < A[2]+B[2]+C[2] ? -1 : 1;
+  */
 }
 
+void split(unsigned i3, GLuint ia, GLuint ib, GLuint ic,
+           double *a, double *b, double *c, double *N, double *A) {
+  double td=intersect(a,b,N,A);
+  double te=intersect(a,c,N,A);
+      
+  triple d=interp(a,b,td);
+  triple e=interp(a,c,te);
+      
+  GLuint Ia=tstride*ia;
+  GLuint Ib=tstride*ib;
+  GLuint Ic=tstride*ic;
+    
+  triple na=triple(V[Ia+3],V[Ia+4],V[Ia+5]);
+  triple nb=triple(V[Ib+3],V[Ib+4],V[Ib+5]);
+  triple nc=triple(V[Ic+3],V[Ic+4],V[Ic+5]);
+  
+  triple nd=interp(na,nb,td);
+  triple ne=interp(na,nc,te);
+      
+  GLuint id,ie;
+  
+  if(colors) {
+    GLfloat *ca=&V[Ia+6];
+    GLfloat *cb=&V[Ib+6];
+    GLfloat *cc=&V[Ic+6];
+        
+    GLfloat cd[4],ce[4];
+    interp(cd,ca,cb,td);
+    interp(ce,ca,cc,te);
+        
+    id=BezierPatch::tVertex(d,nd,cd);
+    ie=BezierPatch::tVertex(e,ne,ce);
+  } else {
+    id=BezierPatch::tvertex(d,nd);
+    ie=BezierPatch::tvertex(e,ne);
+  }
+      
+  I[i3]=ia;
+  I[i3+1]=id;
+  I[i3+2]=ie;
+      
+  I.push_back(id);
+  I.push_back(ib);
+  I.push_back(ie);
+      
+  I.push_back(ie);
+  I.push_back(ib);
+  I.push_back(ic);
+}
+
 void BezierPatch::init(double res, const triple& Min, const triple& Max,
                        bool transparent, GLfloat *colors)
 {
-  empty=false;
   res2=res*res;
   Res2=BezierFactor*BezierFactor*res2;
   Epsilon=FillFactor*res;
@@ -65,6 +309,7 @@
   this->Max=Max;
   
   const size_t nbuffer=10000;
+  indices.reserve(nbuffer);
   if(transparent) {
     tbuffer.reserve(nbuffer);
     tindices.reserve(nbuffer);
@@ -78,7 +323,6 @@
     }
   } else {
     buffer.reserve(nbuffer);
-    indices.reserve(nbuffer);
     pindices=&indices;
     pvertex=&vertex;
     if(colors) {
@@ -586,25 +830,83 @@
   }
 }
 
+void transform(const std::vector<GLfloat>& b)
+{
+  unsigned n=b.size()/tstride;
+//  xbuffer.resize(n);
+//  ybuffer.resize(n);
+  zbuffer.resize(n);
+  
+  for(unsigned i=0; i < n; ++i) {
+    unsigned j=tstride*i;
+//    xbuffer[i]=Tx[0]*b[j]+Tx[1]*b[j+1]+Tx[2]*b[j+2];
+//    ybuffer[i]=Ty[0]*b[j]+Ty[1]*b[j+1]+Ty[2]*b[j+2];
+    zbuffer[i]=Tz[0]*b[j]+Tz[1]*b[j+1]+Tz[2]*b[j+2];
+  }
+  
+}
+
+// precompute min and max bounds of each triangle
+void bounds(const std::vector<GLuint>& I)
+{
+  unsigned n=I.size()/3;
+  xmin.resize(n);
+  xmax.resize(n);
+  ymin.resize(n);
+  ymax.resize(n);
+  zmin.resize(n);
+  zmax.resize(n);
+  
+  for(unsigned i=0; i < n; ++i) {
+    unsigned i3=3*i;
+    unsigned Ia=I[i3];
+    unsigned Ib=I[i3+1];
+    unsigned Ic=I[i3+2];
+    
+    double xa=xbuffer[Ia];
+    double xb=xbuffer[Ib];
+    double xc=xbuffer[Ic];
+    
+    double ya=ybuffer[Ia];
+    double yb=ybuffer[Ib];
+    double yc=ybuffer[Ic];
+    
+    double za=zbuffer[Ia];
+    double zb=zbuffer[Ib];
+    double zc=zbuffer[Ic];
+    
+    xmin[i]=min(xa,xb,xc);
+    xmax[i]=max(xa,xb,xc);
+    
+    ymin[i]=min(ya,yb,yc);
+    ymax[i]=max(ya,yb,yc);
+    
+    zmin[i]=min(za,zb,zc);
+    zmax[i]=max(za,zb,zc);
+  }
+}
+  
 void BezierPatch::draw()
 {
-  if(empty) return;
-  size_t stride=6;
-  size_t Stride=10;
-  size_t size=sizeof(GLfloat);
-  size_t bytestride=stride*size;
-  size_t Bytestride=Stride*size;
+  if(nvertices == 0 && ntvertices == 0 && Nvertices == 0 && Ntvertices == 0)
+    return;
+  
+  const size_t stride=6;
+  const size_t Stride=10;
+  const size_t size=sizeof(GLfloat);
+  const size_t bytestride=stride*size;
+  const size_t Bytestride=Stride*size;
     
   glEnableClientState(GL_NORMAL_ARRAY);
   glEnableClientState(GL_VERTEX_ARRAY);
   
-  if(indices.size()) {
+  if(nvertices > 0) {
     glVertexPointer(3,GL_FLOAT,bytestride,&buffer[0]);
     glNormalPointer(GL_FLOAT,bytestride,&buffer[3]);
     glDrawElements(GL_TRIANGLES,indices.size(),GL_UNSIGNED_INT,&indices[0]);
   }
   
-  if(Indices.size()) {
+  if(Nvertices > 0) {
     glEnableClientState(GL_COLOR_ARRAY);
     glEnable(GL_COLOR_MATERIAL);
     glVertexPointer(3,GL_FLOAT,Bytestride,&Buffer[0]);
@@ -615,19 +917,25 @@
     glDisableClientState(GL_COLOR_ARRAY);
   }
   
-  if(tindices.size()) {
-    B=&tbuffer[0]; 
+  if(ntvertices > 0) {
     tstride=stride;
+    transform(tbuffer); 
+//    bounds(tindices);
+    
     qsort(&tindices[0],tindices.size()/3,3*sizeof(GLuint),compare);
+      
     glVertexPointer(3,GL_FLOAT,bytestride,&tbuffer[0]);
     glNormalPointer(GL_FLOAT,bytestride,&tbuffer[3]);
     glDrawElements(GL_TRIANGLES,tindices.size(),GL_UNSIGNED_INT,&tindices[0]);
   }
   
-  if(tIndices.size()) {
-    B=&tBuffer[0];
+  if(Ntvertices > 0) {
     tstride=Stride;
+    transform(tBuffer);
+//    bounds(tIndices);
+    
     qsort(&tIndices[0],tIndices.size()/3,3*sizeof(GLuint),compare);
+    
     glEnableClientState(GL_COLOR_ARRAY);
     glEnable(GL_COLOR_MATERIAL);
     glVertexPointer(3,GL_FLOAT,Bytestride,&tBuffer[0]);

Modified: trunk/Build/source/utils/asymptote/bezierpatch.h
===================================================================
--- trunk/Build/source/utils/asymptote/bezierpatch.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/bezierpatch.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -44,9 +44,8 @@
   typedef GLuint VertexFunction(const triple &v, const triple& n, GLfloat *c);
   vertexFunction *pvertex;
   VertexFunction *pVertex;
-  bool empty;
   
-  BezierPatch() : empty(true) {}
+  BezierPatch() {}
   
   void init(double res, const triple& Min, const triple& Max,
             bool transparent, GLfloat *colors=NULL);
@@ -192,7 +191,6 @@
   }
   
   void clear() {
-    empty=true;
     nvertices=ntvertices=Nvertices=Ntvertices=0;
     buffer.clear();
     indices.clear();

Added: trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,86 @@
+        Compiling MSWindows binary of Asymptote under CYGWIN-x86_64
+
+First run build-asymptote on Linux. This will build the documentation
+and source tar ball and copy them to a directory ~/shared which needs to be
+shared via virtualbox to the cygwin build environment.
+
+Install these cygwin packages:
+
+wget
+make
+patch
+gcc-g++
+autoconf
+bison
+flex
+w32api-headers
+w32api-runtime
+zlib-devel
+libGLU-devel
+libtirpc-devel (SRC)
+libncurses-devel (SRC)
+libreadline-devel (SRC)
+libfftw3-devel (SRC)
+libgsl-devel (SRC)
+automake
+libtool
+
+ln -s /usr/include/tirpc/rpc /usr/include/rpc
+ln -s /usr/include/tirpc/netconfig.h /usr/include/netconfig.h
+ln -s /usr/lib/libtirpc.a /usr/lib/librpc.a
+
+mv /usr/include/GL /usr/include/GL.orig
+
+Build and install from /usr/local/src:
+
+gsl-devel
+./configure --prefix=/usr
+make install
+
+ncurses-devel
+./configure --prefix=/usr
+make install
+
+readline-devel
+./configure --prefix=/usr --without-curses --disable-shared
+make install
+
+fftw3-devel:
+./configure --prefix=/usr --enable-shared 
+make install
+
+Compile static libraries from source:
+tirpc-devel
+./configure --prefix=/usr --disable-gssapi
+make install
+
+termcap-1.3.1
+./configure --prefix=/usr
+make install
+
+git clone http://github.com/vectorgraphics/asymptote
+
+cd /usr/include
+patch -p0 < ~/asymptote/patches/cygwin_glu.patch
+
+cd
+~/asymptote/build-scripts/build-freeglut
+mkdir -p ~/dll/cygwin
+cp /usr/bin/cygwin1.dll ~/dll/cygwin
+
+install texlive
+
+mkdir ~/CTAN
+cp -a ~/asymptote/buildscripts/README-binaries ~/CTAN
+
+GCVERSION=7.6.2
+tar -zxf gc-$GCVERSION.tar.gz
+tar -zxf libatomic_ops-$GCVERSION.tar.gz
+mv libatomic_ops-$GCVERSION gc-$GCVERSION/libatomic_ops
+cd gc-$GCVERSION
+patch < ~/asymptote/patches/cygwin_gc.patch
+./configure --disable-shared
+make check
+
+VERSION=2.42
+~/asymptote/build-scripts/build-asymptote.dos $VERSION

Added: trunk/Build/source/utils/asymptote/build-scripts/README-binaries
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/README-binaries	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/README-binaries	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,5 @@
+The Asymptote executable for MSWindows can only be released under the GNU
+General Public License (GPL) as it is linked against the GNU Scientific
+Library, GNU Readline library, and other GPL libraries. The Asymptote
+source itself is released under the GNU Lesser General Public License.
+


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/README-binaries
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/build-scripts/build-asymptote
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/build-asymptote	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/build-asymptote	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,74 @@
+#!/bin/sh -x
+# Usage: build-asymptote [suffix]
+
+HOME=~bowman
+SHARED=$HOME/shared/asy
+
+GCVERSION=7.6.2
+ATOMICVERSION=7.6.2
+GC=gc-$GCVERSION
+
+MAKEFLAGS=-j8
+export MAKEFLAGS
+ASYMPTOTE=$HOME/asymptote
+BUILD=/usr/local/src
+BINDIR=usr
+test /usr -ef $BUILD/$BINDIR && exit
+LATEXDIR=$BUILD/$BINDIR/share/texmf/tex/latex/asymptote
+cd $BUILD
+rm -rf asymptote
+git clone http://github.com/vectorgraphics/asymptote
+cd asymptote
+git log > ChangeLog
+VERSIONgit=`grep AC_INIT configure.ac | cut -s -d[ -f3 | cut -s -d] -f1`
+VERSION=${VERSIONgit/git/}
+cat configure.ac | sed -e "s/$VERSIONgit/$VERSION/" > configure.ac_
+mv configure.ac_ configure.ac
+cat $ASYMPTOTE/asymptote.spec | sed -e "s|Version:.*|Version:        $VERSION|" > asymptote.spec
+SRC=asymptote-$VERSION.src.tgz
+if [ $# == 0 ]; then
+  cp asymptote.spec $ASYMPTOTE
+fi
+cd $BUILD
+rm -rf asymptote-$VERSION
+rm -rf $BUILD/$BINDIR
+mv asymptote asymptote-$VERSION
+wget http://hboehm.info/gc/gc_source/gc-$GCVERSION.tar.gz
+wget http://www.ivmaisoft.com/_bin/atomic_ops/libatomic_ops-$ATOMICVERSION.tar.gz
+cp /usr/local/src/$GC.tar.gz asymptote-$VERSION
+cp /usr/local/src/libatomic_ops-$ATOMICVERSION.tar.gz asymptote-$VERSION
+chown -R root.root asymptote-$VERSION
+cd asymptote-$VERSION
+find . -type d -exec /bin/bash -c "cd '{}';rm -rf .git" \;
+rm -f .gitignore
+./autogen.sh
+./configure
+make $MAKEFLAGS check || exit
+make uninstall
+make $MAKEFLAGS asy
+make -j1 all
+make -j1 install
+#rm asy
+#make LFLAGS=-static
+strip asy
+make DESTDIR="$BUILD/" latexdir=$LATEXDIR install
+#rm $GC.tar.gz
+rm $BUILD/$BINDIR/local/info/dir
+cp -a $BUILD/asymptote-$VERSION/ChangeLog .
+cp -a $ASYMPTOTE/ReleaseNotes .
+make distclean
+rm -rf autom4te.cache
+cd /usr/local/share/doc/asymptote
+rm -rf $SHARED/asydoc
+mkdir -p $SHARED/asydoc/png
+mkdir -p $SHARED/asydoc/FAQ
+cp -a *.pdf ../../man/man1/asy.1 $SHARED/asydoc
+cp -a /usr/local/share/info/asymptote/asymptote.info $SHARED/asydoc/png
+cp -a /usr/local/share/info/asy-faq.info $SHARED/asydoc/FAQ
+cd $BUILD
+tar cfz $SRC asymptote-$VERSION
+tar cfz asymptote-$VERSION.i386.tgz $BINDIR
+cp $SRC $SHARED
+rm -rf $BUILD/$BINDIR
+tar -zxf asymptote-$VERSION.i386.tgz
+su rpmbuild -c "rpmbuild -ta --nodeps $SRC && rm -rf ~/rpms/BUILD/asymptote-$VERSION"


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/build-asymptote
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,78 @@
+#!/bin/sh -x
+GC=7.6.2
+
+SHARED=~/shared/asy
+MAKEFLAGS=-j8
+export MAKEFLAGS
+VERSION=$1
+if [ -z $VERSION ]; then
+VERSION=`grep AC_INIT configure.ac | cut -s -d[ -f3 | cut -s -d] -f1`
+if [ -z $VERSION ]; then
+echo Usage: $0 VERSION
+exit
+fi
+else
+echo Building asymptote-$VERSION
+cd ~/
+rm -rf asymptote-$VERSION
+mkdir -p CTAN
+rm -rf CTAN/asymptote-$VERSION
+tar -zxf $SHARED/asymptote-$VERSION.src.tgz -C CTAN
+tar -zxf $SHARED/asymptote-$VERSION.src.tgz
+mkdir -p CTAN/asymptote-$VERSION/binaries/i386-win32/texlive
+cd asymptote-$VERSION
+fi
+BUILD=build-$VERSION
+ln -sf ../gc-$GC.tar.gz .
+ln -sf ../gc-$GC .
+make -n MSDOS=1 >& /dev/null || ./configure OSTYPE=msdos --enable-gc=$GC --with-latex=/usr/local/share --with-context=/usr/local/share
+rm -rf $BUILD
+mkdir -p $BUILD
+cp -a $HOME/dll/cygwin/*.dll $HOME/dll/*.dll $BUILD
+chmod 0644 $BUILD/*.dll
+cp -a $BUILD/*.dll ~/CTAN/asymptote-$VERSION/binaries/i386-win32/
+cp -a $HOME/dll/*.dll .
+make MSDOS=1 DESTDIR="$BUILD/" docdir="$BUILD/"
+test -f asy.list || make MSDOS=1 keywords DESTDIR="$BUILD/" docdir="$BUILD/"
+make MSDOS=1 install-asy DESTDIR="$BUILD/" docdir="$BUILD/"
+cp asy.ico README LICENSE* $BUILD
+pushd $BUILD
+mv usr/local/bin/* .
+mv usr/local/share/asymptote/GUI/*.py .
+rm -rf usr/local/share/asymptote/GUI
+mv usr/local/share/asymptote/* .
+cp $SHARED/asydoc/*.pdf .
+rm -rf bin share doc usr
+popd
+echo \!define PRODUCT_VERSION \"$VERSION\" > AsymptoteInstallInfo.nsi
+# generate uninstallation commands
+ls -p1 $BUILD \
+    | awk '{ if(index($0,"/")==length($0)) print "RMDir /r $INSTDIR\\" substr($0,0,length($0)-1); else print "Delete $INSTDIR\\" $0 }' \
+	> AsymptoteUninstallList.nsi
+
+/cygdrive/c/Program\ Files\ \(x86\)/NSIS/makensis.exe asymptote.nsi
+cp -a --no-preserve=mode asymptote-$VERSION-setup.exe $SHARED
+mv asymptote-$VERSION-setup.exe ~/
+
+cd ~/
+rm -rf asymptote-${VERSION}TL || exit
+cp -a asymptote-$VERSION asymptote-${VERSION}TL
+sed asymptote-$VERSION/config.h -e 's/ASYMPTOTE_SYSDIR ".*"/ASYMPTOTE_SYSDIR ""/g' > asymptote-${VERSION}TL/config.h
+sed asymptote-$VERSION/configure.ac -e 's/\-std=c++11//g' > asymptote-${VERSION}TL/configure.ac
+touch -r asymptote-$VERSION/config.h asymptote-${VERSION}TL/config.h
+touch -r asymptote-$VERSION/configure.ac asymptote-${VERSION}TL/configure.ac
+cd asymptote-${VERSION}TL
+rm settings.o
+rm -f doc/*.aux doc/*.log doc/*.dvi
+make MSDOS=1 DESTDIR="$BUILD/"
+make MSDOS=1 install-asy DESTDIR="$BUILD/"
+mv $BUILD/usr/local/bin/asy.exe $BUILD
+cp $BUILD/asy.exe ~/CTAN/asymptote-$VERSION/binaries/i386-win32/texlive
+cp -a configure.ac ~/CTAN/asymptote-$VERSION/
+cp -a $SHARED/asydoc/* ~/CTAN/asymptote-$VERSION/doc
+cd ~/CTAN/asymptote-$VERSION/binaries/i386-win32
+ln -sf ../../README .
+cd ~/CTAN
+cp -a ~/asymptote/build-scripts/README-binaries asymptote-$VERSION/binaries/i386-win32/texlive/README
+tar cfz asymptote-$VERSION-CTAN.tgz asymptote-$VERSION
+cp -a --no-preserve=mode asymptote-$VERSION-CTAN.tgz $SHARED


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/build-scripts/build-freeglut
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/build-freeglut	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/build-freeglut	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,22 @@
+#!/bin/sh -x
+#Be sure to remove /usr/include/GL
+wget http://prdownloads.sourceforge.net/freeglut/freeglut-2.8.1.tar.gz
+ln -sf /usr/bin/cyggcc_s-1.dll /usr/lib/libgcc_s.a
+tar -zxf freeglut-2.8.1.tar.gz
+cd freeglut-2.8.1
+patch -p1 < ~/asymptote/patches/cygwin_freeglut-2.8.1.patch
+./configure --prefix=/usr --without-x
+make
+cd src
+gcc -s -static -shared -o freeglut.dll *.o -Wl,--out-implib=libfreeglut.a -lglu32 -lopengl32 -lgdi32 -lwinmm
+cp freeglut.dll /lib
+mkdir -p ~/dll
+cp freeglut.dll ~/dll
+gcc -s -shared -o freeglut.dll *.o -Wl,--out-implib=libfreeglut.a -lglu32 -lopengl32 -lgdi32 -lwinmm
+cp libfreeglut.a /lib
+cd ..
+cp -a include/GL/*.h /usr/include/w32api/GL/
+
+#OPTIONAL: To compile manually in src:
+#gcc -O2 -c -D_WIN32 -DHAVE_CONFIG_H -DFREEGLUT_EXPORTS *.c -I.. -I../include
+


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/build-freeglut
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/camp.l
===================================================================
--- trunk/Build/source/utils/asymptote/camp.l	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/camp.l	2018-04-03 22:35:04 UTC (rev 47274)
@@ -204,7 +204,7 @@
 LETTER [_A-Za-z]
 ESC \\
 ENDL \\?(\r\n|\n|\r)
-EXTRAOPS <<|>>|$|$$|@|@@|~
+EXTRAOPS <<|>>|$|$$|@|@@|~|<>
 
 %%
 

Modified: trunk/Build/source/utils/asymptote/config.guess
===================================================================
--- trunk/Build/source/utils/asymptote/config.guess	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/config.guess	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2018 Free Software Foundation, Inc.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
 
-timestamp='2018-03-08'
+timestamp='2008-01-23'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -15,23 +17,27 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
 #
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
 #
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-#
-# Please send patches to <config-patches at gnu.org>.
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
 
-
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
@@ -39,7 +45,7 @@
 
 Output the configuration name of the system \`$me' is run on.
 
-Options:
+Operation modes:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -50,7 +56,8 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -107,9 +114,9 @@
 dummy=$tmp/dummy ;
 tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
 case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > "$dummy.c" ;
+ ,,)    echo "int x;" > $dummy.c ;
 	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
 	     CC_FOR_BUILD="$c"; break ;
 	  fi ;
 	done ;
@@ -132,40 +139,12 @@
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "$UNAME_SYSTEM" in
-Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
-
-	eval "$set_cc_for_build"
-	cat <<-EOF > "$dummy.c"
-	#include <features.h>
-	#if defined(__UCLIBC__)
-	LIBC=uclibc
-	#elif defined(__dietlibc__)
-	LIBC=dietlibc
-	#else
-	LIBC=gnu
-	#endif
-	EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
-
-	# If ldd exists, use it to detect musl libc.
-	if command -v ldd >/dev/null && \
-		ldd --version 2>&1 | grep -q ^musl
-	then
-	    LIBC=musl
-	fi
-	;;
-esac
-
 # Note: order is significant - the case branches are not exclusive.
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -175,33 +154,23 @@
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-	    "/sbin/$sysctl" 2>/dev/null || \
-	    "/usr/sbin/$sysctl" 2>/dev/null || \
-	    echo unknown)`
-	case "$UNAME_MACHINE_ARCH" in
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
-	    earmv*)
-		arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
-		endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
-		machine="${arch}${endian}"-unknown
-		;;
-	    *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently (or will in the future) and ABI.
-	case "$UNAME_MACHINE_ARCH" in
-	    earm*)
-		os=netbsdelf
-		;;
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval "$set_cc_for_build"
+		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
+			| grep __ELF__ >/dev/null
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -211,70 +180,43 @@
 		fi
 		;;
 	    *)
-		os=netbsd
+	        os=netbsd
 		;;
 	esac
-	# Determine ABI tags.
-	case "$UNAME_MACHINE_ARCH" in
-	    earm*)
-		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
-		;;
-	esac
 	# The OS release
 	# Debian GNU/NetBSD machines have a different userland, and
 	# thus, need a distinct triplet. However, they do not need
 	# kernel version information, so it can be replaced with a
 	# suitable tag, in the style of linux-gnu.
-	case "$UNAME_VERSION" in
+	case "${UNAME_VERSION}" in
 	    Debian*)
 		release='-gnu'
 		;;
 	    *)
-		release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "$machine-${os}${release}${abi}"
+	echo "${machine}-${os}${release}"
 	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
-	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
 	exit ;;
-    *:LibertyBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
-	exit ;;
-    *:MidnightBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
-	exit ;;
     *:ekkoBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
 	exit ;;
     *:SolidBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
 	exit ;;
     macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
     *:MirBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
-    *:Sortix:*:*)
-	echo "$UNAME_MACHINE"-unknown-sortix
-	exit ;;
-    *:Redox:*:*)
-	echo "$UNAME_MACHINE"-unknown-redox
-	exit ;;
-    mips:OSF1:*.*)
-        echo mips-dec-osf1
-        exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -281,7 +223,7 @@
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -291,35 +233,35 @@
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE=alpha ;;
+		UNAME_MACHINE="alpha" ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE=alpha ;;
+		UNAME_MACHINE="alpha" ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE=alpha ;;
+		UNAME_MACHINE="alpha" ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE=alphaev5 ;;
+		UNAME_MACHINE="alphaev5" ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE=alphaev56 ;;
+		UNAME_MACHINE="alphaev56" ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE=alphapca56 ;;
+		UNAME_MACHINE="alphapca56" ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE=alphapca57 ;;
+		UNAME_MACHINE="alphapca57" ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE=alphaev6 ;;
+		UNAME_MACHINE="alphaev6" ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE=alphaev67 ;;
+		UNAME_MACHINE="alphaev67" ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE=alphaev68 ;;
+		UNAME_MACHINE="alphaev68" ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE=alphaev68 ;;
+		UNAME_MACHINE="alphaev68" ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE=alphaev68 ;;
+		UNAME_MACHINE="alphaev68" ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE=alphaev69 ;;
+		UNAME_MACHINE="alphaev69" ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE=alphaev7 ;;
+		UNAME_MACHINE="alphaev7" ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE=alphaev79 ;;
+		UNAME_MACHINE="alphaev79" ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
@@ -326,19 +268,25 @@
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
 	exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
-	echo "$UNAME_MACHINE"-unknown-amigaos
+	echo ${UNAME_MACHINE}-unknown-amigaos
 	exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
-	echo "$UNAME_MACHINE"-unknown-morphos
+	echo ${UNAME_MACHINE}-unknown-morphos
 	exit ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
@@ -347,12 +295,12 @@
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-	echo powerpc-ibm-os400
+        echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix"$UNAME_RELEASE"
+	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
+    arm:riscos:*:*|arm:RISCOS:*:*)
 	echo arm-unknown-riscos
 	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -376,39 +324,20 @@
 	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
-    s390x:SunOS:*:*)
-	echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-	exit ;;
     sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux"$UNAME_RELEASE"
-	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval "$set_cc_for_build"
-	SUN_ARCH=i386
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH=x86_64
-	    fi
-	fi
-	echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
@@ -417,25 +346,25 @@
 		;;
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
 	exit ;;
     sun3*:SunOS:*:*)
-	echo m68k-sun-sunos"$UNAME_RELEASE"
+	echo m68k-sun-sunos${UNAME_RELEASE}
 	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
-		echo m68k-sun-sunos"$UNAME_RELEASE"
+		echo m68k-sun-sunos${UNAME_RELEASE}
 		;;
 	    sun4)
-		echo sparc-sun-sunos"$UNAME_RELEASE"
+		echo sparc-sun-sunos${UNAME_RELEASE}
 		;;
 	esac
 	exit ;;
     aushp:SunOS:*:*)
-	echo sparc-auspex-sunos"$UNAME_RELEASE"
+	echo sparc-auspex-sunos${UNAME_RELEASE}
 	exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
@@ -446,44 +375,44 @@
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
+        echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
+        echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint"$UNAME_RELEASE"
-	exit ;;
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint"$UNAME_RELEASE"
-	exit ;;
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint"$UNAME_RELEASE"
-	exit ;;
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
     m68k:machten:*:*)
-	echo m68k-apple-machten"$UNAME_RELEASE"
+	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
     powerpc:machten:*:*)
-	echo powerpc-apple-machten"$UNAME_RELEASE"
+	echo powerpc-apple-machten${UNAME_RELEASE}
 	exit ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
 	exit ;;
     RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix"$UNAME_RELEASE"
+	echo mips-dec-ultrix${UNAME_RELEASE}
 	exit ;;
     VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix"$UNAME_RELEASE"
+	echo vax-dec-ultrix${UNAME_RELEASE}
 	exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix"$UNAME_RELEASE"
+	echo clipper-intergraph-clix${UNAME_RELEASE}
 	exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval "$set_cc_for_build"
-	sed 's/^	//' << EOF > "$dummy.c"
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
 #ifdef __cplusplus
 #include <stdio.h>  /* for printf() prototype */
 	int main (int argc, char *argv[]) {
@@ -492,23 +421,23 @@
 #endif
 	#if defined (host_mips) && defined (MIPSEB)
 	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
 	#endif
 	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
 	#endif
 	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
 	#endif
 	#endif
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
-	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
 	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos"$UNAME_RELEASE"
+	echo mips-mips-riscos${UNAME_RELEASE}
 	exit ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
@@ -532,21 +461,21 @@
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
-	    if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
-	       [ "$TARGET_BINARY_INTERFACE"x = x ]
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
 	    then
-		echo m88k-dg-dgux"$UNAME_RELEASE"
+		echo m88k-dg-dgux${UNAME_RELEASE}
 	    else
-		echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
 	    fi
 	else
-	    echo i586-dg-dgux"$UNAME_RELEASE"
+	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
-	exit ;;
+ 	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -561,7 +490,7 @@
 	echo m68k-tektronix-bsd
 	exit ;;
     *:IRIX*:*:*)
-	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
 	exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
 	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
@@ -573,14 +502,14 @@
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
 	else
-		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
-	echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
 	exit ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval "$set_cc_for_build"
-		sed 's/^		//' << EOF > "$dummy.c"
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
 		#include <sys/systemcfg.h>
 
 		main()
@@ -591,7 +520,7 @@
 			exit(0);
 			}
 EOF
-		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
 		then
 			echo "$SYSTEM_NAME"
 		else
@@ -603,29 +532,28 @@
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[4567])
+    *:AIX:*:[456])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/lslpp ] ; then
-		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
-			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
 	else
-		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
-	echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
 	exit ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
 	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
 	exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
 	exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
@@ -640,67 +568,67 @@
 	echo m68k-hp-bsd4.4
 	exit ;;
     9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-	case "$UNAME_MACHINE" in
-	    9000/31?)            HP_ARCH=m68000 ;;
-	    9000/[34]??)         HP_ARCH=m68k ;;
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "$sc_cpu_version" in
-		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "$sc_kernel_bits" in
-			  32) HP_ARCH=hppa2.0n ;;
-			  64) HP_ARCH=hppa2.0w ;;
-			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
-			esac ;;
-		    esac
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
 		fi
-		if [ "$HP_ARCH" = "" ]; then
-		    eval "$set_cc_for_build"
-		    sed 's/^		//' << EOF > "$dummy.c"
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
 
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
 
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
 
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
 EOF
-		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ "$HP_ARCH" = hppa2.0w ]
+	if [ ${HP_ARCH} = "hppa2.0w" ]
 	then
-	    eval "$set_cc_for_build"
+	    eval $set_cc_for_build
 
 	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
 	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
@@ -711,23 +639,23 @@
 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
 	    # => hppa64-hp-hpux11.23
 
-	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
 	    then
-		HP_ARCH=hppa2.0w
+		HP_ARCH="hppa2.0w"
 	    else
-		HP_ARCH=hppa64
+		HP_ARCH="hppa64"
 	    fi
 	fi
-	echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
 	exit ;;
     ia64:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux"$HPUX_REV"
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
 	exit ;;
     3050*:HI-UX:*:*)
-	eval "$set_cc_for_build"
-	sed 's/^	//' << EOF > "$dummy.c"
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
 	#include <unistd.h>
 	int
 	main ()
@@ -752,11 +680,11 @@
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
 		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
 	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 	echo hppa1.1-hp-bsd
 	exit ;;
     9000/8??:4.3bsd:*:*)
@@ -765,7 +693,7 @@
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
 	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
 	exit ;;
     hp8??:OSF1:*:*)
@@ -773,9 +701,9 @@
 	exit ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
-	    echo "$UNAME_MACHINE"-unknown-osf1mk
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
-	    echo "$UNAME_MACHINE"-unknown-osf1
+	    echo ${UNAME_MACHINE}-unknown-osf1
 	fi
 	exit ;;
     parisc*:Lites*:*:*)
@@ -783,274 +711,325 @@
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-	exit ;;
+        exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-	exit ;;
+        exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-	exit ;;
+        exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-	exit ;;
+        exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-	exit ;;
+        exit ;;
     CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*[A-Z]90:*:*:*)
-	echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*TS:*:*:*)
-	echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-	FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
     5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-	FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
 	exit ;;
     sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi"$UNAME_RELEASE"
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:BSD/OS:*:*)
-	echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case "$UNAME_PROCESSOR" in
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    amd64)
-		UNAME_PROCESSOR=x86_64 ;;
-	    i386)
-		UNAME_PROCESSOR=i586 ;;
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
-	echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
 	exit ;;
     i*:CYGWIN*:*)
-	echo "$UNAME_MACHINE"-pc-cygwin
+	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
-    *:MINGW64*:*)
-	echo "$UNAME_MACHINE"-pc-mingw64
-	exit ;;
     *:MINGW*:*)
-	echo "$UNAME_MACHINE"-pc-mingw32
+	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
-    *:MSYS*:*)
-	echo "$UNAME_MACHINE"-pc-msys
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
-	echo "$UNAME_MACHINE"-pc-pw32
+	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    *:Interix*:*)
-	case "$UNAME_MACHINE" in
+    *:Interix*:[3456]*)
+    	case ${UNAME_MACHINE} in
 	    x86)
-		echo i586-pc-interix"$UNAME_RELEASE"
+		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix"$UNAME_RELEASE"
+	    EM64T | authenticamd)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	    IA64)
-		echo ia64-unknown-interix"$UNAME_RELEASE"
+		echo ia64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
     i*:UWIN*:*)
-	echo "$UNAME_MACHINE"-pc-uwin
+	echo ${UNAME_MACHINE}-pc-uwin
 	exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
 	echo x86_64-unknown-cygwin
 	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
     prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
 	exit ;;
     i*86:Minix:*:*)
-	echo "$UNAME_MACHINE"-pc-minix
+	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
-    aarch64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
     arm*:Linux:*:*)
-	eval "$set_cc_for_build"
+	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
-	    echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
 	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
-	    else
-		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
-	    fi
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
-	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+	echo cris-axis-linux-gnu
 	exit ;;
     crisv32:Linux:*:*)
-	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+	echo crisv32-axis-linux-gnu
 	exit ;;
-    e2k:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
     frv:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+    	echo frv-unknown-linux-gnu
 	exit ;;
-    hexagon:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    i*86:Linux:*:*)
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-	exit ;;
     ia64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    k1om:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
     m32r*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     m68*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval "$set_cc_for_build"
-	sed 's/^	//' << EOF > "$dummy.c"
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
 	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
+	#undef mips
+	#undef mipsel
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
+	CPU=mipsel
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
+	CPU=mips
 	#else
 	CPU=
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
-	test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
-    mips64el:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
 	exit ;;
-    openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-"$LIBC"
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
 	exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
 	exit ;;
-    padre:Linux:*:*)
-	echo sparc-unknown-linux-"$LIBC"
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-"$LIBC"
-	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
-	  PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
-	  *)    echo hppa-unknown-linux-"$LIBC" ;;
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
 	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-"$LIBC"
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
 	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-"$LIBC"
-	exit ;;
-    ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-"$LIBC"
-	exit ;;
-    ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-"$LIBC"
-	exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-ibm-linux
 	exit ;;
     sh64*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    tile*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
     vax:Linux:*:*)
-	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
+	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+	echo x86_64-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^LIBC/{
+		s: ::g
+		p
+	    }'`"
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -1058,54 +1037,54 @@
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
-	echo "$UNAME_MACHINE"-pc-os2-emx
+	echo ${UNAME_MACHINE}-pc-os2-emx
 	exit ;;
     i*86:XTS-300:*:STOP)
-	echo "$UNAME_MACHINE"-unknown-stop
+	echo ${UNAME_MACHINE}-unknown-stop
 	exit ;;
     i*86:atheos:*:*)
-	echo "$UNAME_MACHINE"-unknown-atheos
+	echo ${UNAME_MACHINE}-unknown-atheos
 	exit ;;
     i*86:syllable:*:*)
-	echo "$UNAME_MACHINE"-pc-syllable
+	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos"$UNAME_RELEASE"
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
-	echo "$UNAME_MACHINE"-pc-msdosdjgpp
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
 	exit ;;
-    i*86:*:4.*:*)
-	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
 	else
-		echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
-	echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
 	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
 		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1115,20 +1094,17 @@
 			&& UNAME_MACHINE=i686
 		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
 			&& UNAME_MACHINE=i686
-		echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
 	else
-		echo "$UNAME_MACHINE"-pc-sysv32
+		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configure will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1137,9 +1113,9 @@
 	exit ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
 	exit ;;
     mini*:CTIX:SYS*5:*)
@@ -1159,39 +1135,29 @@
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos"$UNAME_RELEASE"
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
 	exit ;;
     TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos"$UNAME_RELEASE"
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos"$UNAME_RELEASE"
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos"$UNAME_RELEASE"
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv"$UNAME_RELEASE"
+	echo mips-dde-sysv${UNAME_RELEASE}
 	exit ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
@@ -1202,15 +1168,15 @@
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo "$UNAME_MACHINE"-sni-sysv4
+		echo ${UNAME_MACHINE}-sni-sysv4
 	else
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel at ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes at openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1222,7 +1188,7 @@
 	exit ;;
     i*86:VOS:*:*)
 	# From Paul.Green at stratus.com.
-	echo "$UNAME_MACHINE"-stratus-vos
+	echo ${UNAME_MACHINE}-stratus-vos
 	exit ;;
     *:VOS:*:*)
 	# From Paul.Green at stratus.com.
@@ -1229,7 +1195,7 @@
 	echo hppa1.1-stratus-vos
 	exit ;;
     mc68*:A/UX:*:*)
-	echo m68k-apple-aux"$UNAME_RELEASE"
+	echo m68k-apple-aux${UNAME_RELEASE}
 	exit ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
@@ -1236,11 +1202,11 @@
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv"$UNAME_RELEASE"
+	        echo mips-nec-sysv${UNAME_RELEASE}
 	else
-		echo mips-unknown-sysv"$UNAME_RELEASE"
+	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-	exit ;;
+        exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1250,101 +1216,54 @@
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
 	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
     SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux"$UNAME_RELEASE"
+	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
     SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux"$UNAME_RELEASE"
+	echo sx5-nec-superux${UNAME_RELEASE}
 	exit ;;
     SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux"$UNAME_RELEASE"
+	echo sx6-nec-superux${UNAME_RELEASE}
 	exit ;;
     SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux"$UNAME_RELEASE"
+	echo sx7-nec-superux${UNAME_RELEASE}
 	exit ;;
     SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux"$UNAME_RELEASE"
+	echo sx8-nec-superux${UNAME_RELEASE}
 	exit ;;
     SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux"$UNAME_RELEASE"
+	echo sx8r-nec-superux${UNAME_RELEASE}
 	exit ;;
-    SX-ACE:SUPER-UX:*:*)
-	echo sxace-nec-superux"$UNAME_RELEASE"
-	exit ;;
     Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody"$UNAME_RELEASE"
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
     *:Rhapsody:*:*)
-	echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	eval "$set_cc_for_build"
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
-	fi
-	if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
-		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_PPC >/dev/null
-		then
-		    UNAME_PROCESSOR=powerpc
-		fi
-	    fi
-	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
-	fi
-	echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
+	case $UNAME_PROCESSOR in
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = x86; then
+	if test "$UNAME_PROCESSOR" = "x86"; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
-	echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
 	exit ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NEO-*:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk"$UNAME_RELEASE"
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk"$UNAME_RELEASE"
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSR-*:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    NSV-*:NONSTOP_KERNEL:*:*)
-	echo nsv-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    NSX-*:NONSTOP_KERNEL:*:*)
-	echo nsx-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
 	exit ;;
@@ -1352,18 +1271,18 @@
 	echo bs2000-siemens-sysv
 	exit ;;
     DS/*:UNIX_System_V:*:*)
-	echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
 	exit ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = 386; then
+	if test "$cputype" = "386"; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
 	fi
-	echo "$UNAME_MACHINE"-unknown-plan9
+	echo ${UNAME_MACHINE}-unknown-plan9
 	exit ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
@@ -1384,14 +1303,14 @@
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-	echo mips-sei-seiux"$UNAME_RELEASE"
+        echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
-	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "$UNAME_MACHINE" in
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
 	    V*) echo vax-dec-vms ; exit ;;
@@ -1400,48 +1319,179 @@
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
 	exit ;;
     i*86:rdos:*:*)
-	echo "$UNAME_MACHINE"-pc-rdos
+	echo ${UNAME_MACHINE}-pc-rdos
 	exit ;;
-    i*86:AROS:*:*)
-	echo "$UNAME_MACHINE"-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo "$UNAME_MACHINE"-unknown-esx
-	exit ;;
-    amd64:Isilon\ OneFS:*:*)
-	echo x86_64-unknown-onefs
-	exit ;;
 esac
 
-echo "$0: unable to guess system type" >&2
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
-    mips:Linux | mips64:Linux)
-	# If we got here on MIPS GNU/Linux, output extra information.
-	cat >&2 <<EOF
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
 
-NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
-the system type. Please install a C compiler and try again.
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
 EOF
-	;;
-esac
 
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
 cat >&2 <<EOF
+$0: unable to guess system type
 
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite *all*
-copies of config.guess and config.sub with the latest versions from:
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
 
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 and
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
 
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches at gnu.org to
-provide the necessary information to handle your system.
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
 
 config.guess timestamp = $timestamp
 
@@ -1460,16 +1510,16 @@
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 
-UNAME_MACHINE = "$UNAME_MACHINE"
-UNAME_RELEASE = "$UNAME_RELEASE"
-UNAME_SYSTEM  = "$UNAME_SYSTEM"
-UNAME_VERSION = "$UNAME_VERSION"
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
 EOF
 
 exit 1
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"

Modified: trunk/Build/source/utils/asymptote/config.h.in
===================================================================
--- trunk/Build/source/utils/asymptote/config.h.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/config.h.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -18,6 +18,9 @@
 /* Define to 1 if you have the `dup2' function. */
 #undef HAVE_DUP2
 
+/* Define to 1 if you have the `feenableexcept' function. */
+#undef HAVE_FEENABLEEXCEPT
+
 /* Define to 1 if you have the <fenv.h> header file. */
 #undef HAVE_FENV_H
 

Modified: trunk/Build/source/utils/asymptote/config.sub
===================================================================
--- trunk/Build/source/utils/asymptote/config.sub	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/config.sub	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,31 +1,36 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2018 Free Software Foundation, Inc.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2018-03-08'
+timestamp='2012-04-18'
 
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
+# the same distribution terms that you use for the rest of that program.
 
 
-# Please send patches to <config-patches at gnu.org>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -33,7 +38,7 @@
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -53,11 +58,12 @@
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
 
 Canonicalize a configuration name.
 
-Options:
+Operation modes:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -67,7 +73,9 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -94,7 +102,7 @@
 
     *local*)
        # First pass through any local machine types.
-       echo "$1"
+       echo $1
        exit ;;
 
     * )
@@ -112,24 +120,24 @@
 
 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
 # Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | cloudabi*-eabi* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
-    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
   android-linux)
     os=-linux-android
-    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
     ;;
   *)
-    basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
-    if [ "$basic_machine" != "$1" ]
-    then os=`echo "$1" | sed 's/.*-/-/'`
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
     else os=; fi
     ;;
 esac
@@ -148,7 +156,7 @@
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
+	-apple | -axis | -knuth | -cray | -microblaze)
 		os=
 		basic_machine=$1
 		;;
@@ -178,44 +186,44 @@
 		;;
 	-sco6)
 		os=-sco5v6
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-sco5)
 		os=-sco3.2v5
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-sco4)
 		os=-sco3.2v4
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-sco3.2.[4-9]*)
 		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-sco3.2v[4-9]*)
 		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-sco5v6*)
 		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-sco*)
 		os=-sco3.2v2
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-udk*)
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-isc)
 		os=-isc2.2
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-clix*)
 		basic_machine=clipper-intergraph
 		;;
 	-isc*)
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
 	-lynx*178)
 		os=-lynxos178
@@ -227,8 +235,11 @@
 		os=-lynxos
 		;;
 	-ptx*)
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
 		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
 	-psos*)
 		os=-psos
 		;;
@@ -248,25 +259,21 @@
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| ba \
-	| be32 | be64 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
-	| c4x | c8051 | clipper \
+	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| e2k | epiphany \
-	| fido | fr30 | frv | ft32 \
+	| epiphany \
+	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
-	| i370 | i860 | i960 | ia16 | ia64 \
+	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| k1om \
 	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+	| maxq | mb | microblaze | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -280,13 +287,10 @@
 	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
 	| mipsisa64 | mipsisa64el \
 	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
 	| moxie \
@@ -293,17 +297,16 @@
 	| mt \
 	| msp430 \
 	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
+	| nios | nios2 \
 	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pj | pjl \
+	| open8 \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pru \
 	| pyramid \
-	| riscv32 | riscv64 \
 	| rl78 | rx \
 	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -311,8 +314,7 @@
 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| visium \
-	| wasm32 \
+	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
@@ -326,14 +328,11 @@
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	leon|leon[3-9])
-		basic_machine=sparc-$basic_machine
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
 		;;
 	ms1)
 		basic_machine=mt-unknown
@@ -362,7 +361,7 @@
 	  ;;
 	# Object if more than one company name word.
 	*-*-*)
-		echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
 		exit 1
 		;;
 	# Recognize the basic CPU types with company name.
@@ -371,29 +370,26 @@
 	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
-	| ba-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
+	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| e2k-* | elxsi-* \
+	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| k1om-* \
 	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -407,34 +403,28 @@
 	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
 	| mipsisa64-* | mipsisa64el-* \
 	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
 	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
+	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| open8-* \
-	| or1k*-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pru-* \
 	| pyramid-* \
-	| riscv32-* | riscv64-* \
 	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tile*-* \
@@ -442,8 +432,6 @@
 	| ubicom32-* \
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
-	| visium-* \
-	| wasm32-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -457,7 +445,7 @@
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
 	386bsd)
-		basic_machine=i386-pc
+		basic_machine=i386-unknown
 		os=-bsd
 		;;
 	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
@@ -491,7 +479,7 @@
 		basic_machine=x86_64-pc
 		;;
 	amd64-*)
-		basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	amdahl)
 		basic_machine=580-amdahl
@@ -520,9 +508,6 @@
 		basic_machine=i386-pc
 		os=-aros
 		;;
-	asmjs)
-		basic_machine=asmjs-unknown
-		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -536,7 +521,7 @@
 		os=-linux
 		;;
 	blackfin-*)
-		basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
 		os=-linux
 		;;
 	bluegene*)
@@ -544,13 +529,13 @@
 		os=-cnk
 		;;
 	c54x-*)
-		basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	c55x-*)
-		basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	c6x-*)
-		basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	c90)
 		basic_machine=c90-cray
@@ -639,18 +624,10 @@
 		basic_machine=rs6000-bull
 		os=-bosx
 		;;
-	dpx2*)
+	dpx2* | dpx2*-bull)
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
-	e500v[12])
-		basic_machine=powerpc-unknown
-		os=$os"spe"
-		;;
-	e500v[12]-*)
-		basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		os=$os"spe"
-		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -740,6 +717,9 @@
 	hp9k8[0-9][0-9] | hp8[0-9][0-9])
 		basic_machine=hppa1.0-hp
 		;;
+	hppa-next)
+		os=-nextstep3
+		;;
 	hppaosf)
 		basic_machine=hppa1.1-hp
 		os=-osf
@@ -752,19 +732,19 @@
 		basic_machine=i370-ibm
 		;;
 	i*86v32)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
 		;;
 	i*86v4*)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv4
 		;;
 	i*86v)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv
 		;;
 	i*86sol2)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-solaris2
 		;;
 	i386mach)
@@ -771,7 +751,7 @@
 		basic_machine=i386-mach
 		os=-mach
 		;;
-	vsta)
+	i386-vsta | vsta)
 		basic_machine=i386-unknown
 		os=-vsta
 		;;
@@ -789,17 +769,17 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
-	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
-		;;
 	m68knommu)
 		basic_machine=m68k-unknown
 		os=-linux
 		;;
 	m68knommu-*)
-		basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
 		os=-linux
 		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
 	magnum | m3230)
 		basic_machine=mips-mips
 		os=-sysv
@@ -808,15 +788,11 @@
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
-	microblaze*)
+	microblaze)
 		basic_machine=microblaze-xilinx
 		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
 	mingw32)
-		basic_machine=i686-pc
+		basic_machine=i386-pc
 		os=-mingw32
 		;;
 	mingw32ce)
@@ -831,10 +807,10 @@
 		os=-mint
 		;;
 	mips3*-*)
-		basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
 		;;
 	mips3*)
-		basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
 		;;
 	monitor)
 		basic_machine=m68k-rom68k
@@ -844,19 +820,15 @@
 		basic_machine=powerpc-unknown
 		os=-morphos
 		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
 	msdos)
 		basic_machine=i386-pc
 		os=-msdos
 		;;
 	ms1-*)
-		basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
 	msys)
-		basic_machine=i686-pc
+		basic_machine=i386-pc
 		os=-msys
 		;;
 	mvs)
@@ -895,7 +867,7 @@
 		basic_machine=v70-nec
 		os=-sysv
 		;;
-	next | m*-next)
+	next | m*-next )
 		basic_machine=m68k-next
 		case $os in
 		    -nextstep* )
@@ -940,12 +912,6 @@
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
-	nsv-tandem)
-		basic_machine=nsv-tandem
-		;;
-	nsx-tandem)
-		basic_machine=nsx-tandem
-		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -978,7 +944,7 @@
 		os=-linux
 		;;
 	parisc-*)
-		basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
 		os=-linux
 		;;
 	pbd)
@@ -994,7 +960,7 @@
 		basic_machine=i386-pc
 		;;
 	pc98-*)
-		basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
@@ -1009,16 +975,16 @@
 		basic_machine=i786-pc
 		;;
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pentium4-*)
-		basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pn)
 		basic_machine=pn-gould
@@ -1028,23 +994,23 @@
 	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
 	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle)
+	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppc64)	basic_machine=powerpc64-unknown
 		;;
-	ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little)
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ps2)
 		basic_machine=i386-ibm
@@ -1053,11 +1019,7 @@
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
+	rdos)
 		basic_machine=i386-pc
 		os=-rdos
 		;;
@@ -1098,10 +1060,17 @@
 	sequent)
 		basic_machine=i386-sequent
 		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
 	sh5el)
 		basic_machine=sh5le-unknown
 		;;
-	simso-wrs)
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
 		basic_machine=sparclite-wrs
 		os=-vxworks
 		;;
@@ -1120,7 +1089,7 @@
 		os=-sysv4
 		;;
 	strongarm-* | thumb-*)
-		basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	sun2)
 		basic_machine=m68000-sun
@@ -1242,9 +1211,6 @@
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		;;
-	x64)
-		basic_machine=x86_64-pc
-		;;
 	xbox)
 		basic_machine=i686-pc
 		os=-mingw32
@@ -1253,12 +1219,20 @@
 		basic_machine=xps100-honeywell
 		;;
 	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
 		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
 		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
 	none)
 		basic_machine=none-none
 		os=-none
@@ -1287,6 +1261,10 @@
 	vax)
 		basic_machine=vax-dec
 		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
 	pdp11)
 		basic_machine=pdp11-dec
 		;;
@@ -1296,6 +1274,9 @@
 	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
 	cydra)
 		basic_machine=cydra-cydrome
 		;;
@@ -1315,7 +1296,7 @@
 		# Make sure to match an already-canonicalized machine name.
 		;;
 	*)
-		echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
 		exit 1
 		;;
 esac
@@ -1323,10 +1304,10 @@
 # Here we canonicalize certain aliases for manufacturers.
 case $basic_machine in
 	*-digital*)
-		basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
 		;;
 	*-commodore*)
-		basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
 		;;
 	*)
 		;;
@@ -1337,8 +1318,8 @@
 if [ x"$os" != x"" ]
 then
 case $os in
-	# First match some system type aliases that might get confused
-	# with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
 	-auroraux)
 		os=-auroraux
@@ -1349,6 +1330,9 @@
 	-solaris)
 		os=-solaris2
 		;;
+	-svr4*)
+		os=-sysv4
+		;;
 	-unixware*)
 		os=-sysv4.2uw
 		;;
@@ -1355,42 +1339,36 @@
 	-gnu/linux*)
 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
 		;;
-	# es1800 is here to avoid being matched by es* (a different OS)
-	-es1800*)
-		os=-ose
-		;;
-	# Now accept the basic system types.
+	# First accept the basic system types.
 	# The portable systems comes first.
-	# Each alternative MUST end in a * to match a version number.
+	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
+	      | -sym* | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* | -cloudabi* | -sortix* \
+	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \
-	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -windiss* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
-	      | -midnightbsd*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1407,12 +1385,12 @@
 	-nto*)
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		;;
-	-sim | -xray | -os68k* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* \
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 		;;
 	-mac*)
-		os=`echo "$os" | sed -e 's|mac|macos|'`
+		os=`echo $os | sed -e 's|mac|macos|'`
 		;;
 	-linux-dietlibc)
 		os=-linux-dietlibc
@@ -1421,10 +1399,10 @@
 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 		;;
 	-sunos5*)
-		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
 		;;
 	-sunos6*)
-		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
 		;;
 	-opened*)
 		os=-openedition
@@ -1435,6 +1413,12 @@
 	-wince*)
 		os=-wince
 		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
 	-utek*)
 		os=-bsd
 		;;
@@ -1459,7 +1443,7 @@
 	-nova*)
 		os=-rtmk-nova
 		;;
-	-ns2)
+	-ns2 )
 		os=-nextstep2
 		;;
 	-nsk*)
@@ -1481,7 +1465,7 @@
 	-oss*)
 		os=-sysv3
 		;;
-	-svr4*)
+	-svr4)
 		os=-sysv4
 		;;
 	-svr3)
@@ -1496,9 +1480,21 @@
 	-ose*)
 		os=-ose
 		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
 	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 		os=-mint
 		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
 	-zvmoe)
 		os=-zvmoe
 		;;
@@ -1505,29 +1501,14 @@
 	-dicos*)
 		os=-dicos
 		;;
-	-pikeos*)
-		# Until real need of OS specific support for
-		# particular features comes up, bare metal
-		# configurations are quite functional.
-		case $basic_machine in
-		    arm*)
-			os=-eabi
-			;;
-		    *)
-			os=-elf
-			;;
-		esac
-		;;
 	-nacl*)
 		;;
-	-ios)
-		;;
 	-none)
 		;;
 	*)
 		# Get rid of the `-' at the beginning of $os.
 		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
 		exit 1
 		;;
 esac
@@ -1562,12 +1543,6 @@
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
 	tic54x-*)
 		os=-coff
 		;;
@@ -1617,12 +1592,12 @@
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		;;
-	pru-*)
-		os=-elf
-		;;
 	*-be)
 		os=-beos
 		;;
+	*-haiku)
+		os=-haiku
+		;;
 	*-ibm)
 		os=-aix
 		;;
@@ -1662,7 +1637,7 @@
 	m88k-omron*)
 		os=-luna
 		;;
-	*-next)
+	*-next )
 		os=-nextstep
 		;;
 	*-sequent)
@@ -1677,6 +1652,9 @@
 	i370-*)
 		os=-mvs
 		;;
+	*-next)
+		os=-nextstep3
+		;;
 	*-gould)
 		os=-sysv
 		;;
@@ -1786,15 +1764,15 @@
 				vendor=stratus
 				;;
 		esac
-		basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
 		;;
 esac
 
-echo "$basic_machine$os"
+echo $basic_machine$os
 exit
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"

Modified: trunk/Build/source/utils/asymptote/configure
===================================================================
--- trunk/Build/source/utils/asymptote/configure	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/configure	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Asymptote 2.41.
+# Generated by GNU Autoconf 2.69 for Asymptote 2.42.
 #
 # Report bugs to <http://sourceforge.net/projects/asymptote>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='Asymptote'
 PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.41'
-PACKAGE_STRING='Asymptote 2.41'
+PACKAGE_VERSION='2.42'
+PACKAGE_STRING='Asymptote 2.42'
 PACKAGE_BUGREPORT='http://sourceforge.net/projects/asymptote'
 PACKAGE_URL=''
 
@@ -1283,7 +1283,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Asymptote 2.41 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.42 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1348,7 +1348,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Asymptote 2.41:";;
+     short | recursive ) echo "Configuration of Asymptote 2.42:";;
    esac
   cat <<\_ACEOF
 
@@ -1462,7 +1462,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Asymptote configure 2.41
+Asymptote configure 2.42
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2048,7 +2048,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Asymptote $as_me 2.41, which was
+It was created by Asymptote $as_me 2.42, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4122,7 +4122,7 @@
 
   test -n "$TEXI2DVI" && break
 done
-test -n "$TEXI2DVI" || TEXI2DVI="echo texi2dvi is missing! Please put http://asymptote.sourceforge.net/asymptote.pdf in the doc directory, touch doc/asymptote.pdf, and run configure again; exit 1;"
+test -n "$TEXI2DVI" || TEXI2DVI="@echo \*\*\*\*\*\*\*\*\*\* Please install texi2dvi or put http://asymptote.sourceforge.net/asymptote.pdf in the doc directory: cannot execute texi2dvi"
 
 
 
@@ -5766,8 +5766,8 @@
 
 
 
-GCVERSION=7.6.0
-ATOMICVERSION=7.4.4
+GCVERSION=7.6.2
+ATOMICVERSION=7.6.2
 GCFILE=gc-$GCVERSION
 ac_cv_use_gc="system"
 
@@ -5806,7 +5806,7 @@
 GCLIB=
 GCPPLIB=
 GCNAME="Boehm Garbage Collector"
-GCOPTIONS="--disable-shared --enable-large-config"
+GCOPTIONS="--disable-shared"
 if test "x$ac_cv_use_gc" != "xno" ; then
    OPTIONS=$OPTIONS"-DUSEGC "
    case _$ac_cv_use_gc in
@@ -6864,7 +6864,19 @@
 
 done
 
+for ac_func in feenableexcept
+do :
+  ac_fn_cxx_check_func "$LINENO" "feenableexcept" "ac_cv_func_feenableexcept"
+if test "x$ac_cv_func_feenableexcept" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_FEENABLEEXCEPT 1
+_ACEOF
 
+fi
+done
+
+
+
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include "xstream.h"
@@ -8526,7 +8538,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Asymptote $as_me 2.41, which was
+This file was extended by Asymptote $as_me 2.42, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8588,7 +8600,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-Asymptote config.status 2.41
+Asymptote config.status 2.42
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/utils/asymptote/configure.ac
===================================================================
--- trunk/Build/source/utils/asymptote/configure.ac	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/configure.ac	2018-04-03 22:35:04 UTC (rev 47274)
@@ -3,7 +3,7 @@
 # this file.
 
 AC_PREREQ(2)
-AC_INIT([Asymptote],[2.41],[http://sourceforge.net/projects/asymptote])
+AC_INIT([Asymptote],[2.42],[http://sourceforge.net/projects/asymptote])
 VERSION=$PACKAGE_VERSION
 AC_SUBST(VERSION)
 m4_include([ax_pthread.m4])
@@ -54,7 +54,7 @@
 ])
 
 AC_CHECK_PROGS(TEXI2DVI,[texi2dvi],
-[echo texi2dvi is missing! Please put http://asymptote.sourceforge.net/asymptote.pdf in the doc directory, touch doc/asymptote.pdf, and run configure again; exit 1;])
+[@echo \*\*\*\*\*\*\*\*\*\* Please install texi2dvi or put http://asymptote.sourceforge.net/asymptote.pdf in the doc directory: cannot execute texi2dvi])
 
 AC_SUBST(TEXI2DVI)
 
@@ -123,8 +123,8 @@
 			      [Define to 1 if you have tr1/unordered_map]),
 	[AC_CHECK_HEADER(ext/hash_map,,OPTIONS=$OPTIONS"-DNOHASH ")])])
 
-GCVERSION=7.6.0
-ATOMICVERSION=7.4.4
+GCVERSION=7.6.2
+ATOMICVERSION=7.6.2
 GCFILE=gc-$GCVERSION
 ac_cv_use_gc="system"
 
@@ -145,7 +145,7 @@
 GCLIB=
 GCPPLIB=
 GCNAME="Boehm Garbage Collector"
-GCOPTIONS="--disable-shared --enable-large-config"
+GCOPTIONS="--disable-shared"
 if test "x$ac_cv_use_gc" != "xno" ; then
    OPTIONS=$OPTIONS"-DUSEGC "
    case _$ac_cv_use_gc in
@@ -267,7 +267,9 @@
 AC_HEADER_SYS_WAIT
 AC_CHECK_HEADERS([fenv.h stddef.h libintl.h])
 AC_CHECK_HEADERS(fpu_control.h)
+AC_CHECK_FUNCS([feenableexcept])
 
+
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include "xstream.h"])],
                    [AC_SEARCH_LIBS([xdrstdio_create],[nsl rpc])
 		    AC_DEFINE(HAVE_RPC_RPC_H, 1,

Modified: trunk/Build/source/utils/asymptote/doc/CAD.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl
===================================================================
--- trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl	2018-04-03 22:35:04 UTC (rev 47274)
@@ -61,7 +61,7 @@
 
 open(U,">$prefix.xrefdb-new");
 
-for $x (@outputs) { require("m-$x.pl"); }
+for $x (@outputs) { require("./m-$x.pl"); }
 
 &call('init');
 

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/install-sh
===================================================================
--- trunk/Build/source/utils/asymptote/doc/FAQ/install-sh	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/doc/FAQ/install-sh	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2009-04-28.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,21 +35,25 @@
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
+# `make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
-tab='	'
 nl='
 '
-IFS=" $tab$nl"
+IFS=" ""	$nl"
 
-# Set DOITPROG to "echo" to test this script.
+# set DOITPROG to echo to test this script
 
+# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-doit_exec=${doit:-exec}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -64,6 +68,17 @@
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -82,7 +97,7 @@
 dst_arg=
 
 copy_on_change=false
-is_target_a_directory=possibly
+no_target_directory=
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -122,41 +137,36 @@
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift;;
+	shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
+    -t) dst_arg=$2
+	shift;;
 
-    -T) is_target_a_directory=never;;
+    -T) no_target_directory=true;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --) shift
-        break;;
+    --)	shift
+	break;;
 
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
 
     *)  break;;
   esac
@@ -163,16 +173,6 @@
   shift
 done
 
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -186,10 +186,6 @@
     fi
     shift # arg
     dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
   done
 fi
 
@@ -198,27 +194,14 @@
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call 'install-sh -d' without argument.
+  # It's OK to call `install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
+  trap '(exit $?); exit' 1 2 13 15
 
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
   case $mode in
@@ -228,16 +211,16 @@
 
     *[0-7])
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw='% 200'
+	u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw=,u+rw
+	u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -245,9 +228,9 @@
 
 for src
 do
-  # Protect names problematic for 'test' and other utilities.
+  # Protect names starting with `-'.
   case $src in
-    -* | [=\(\)!]) src=./$src;;
+    -*) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -269,115 +252,129 @@
       echo "$0: no destination specified." >&2
       exit 1
     fi
+
     dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
 
-    # If destination is a directory, append the input filename.
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
       fi
       dstdir=$dst
-      dstbase=`basename "$src"`
-      case $dst in
-	*/) dst=$dst$dstbase;;
-	*)  dst=$dst/$dstbase;;
-      esac
+      dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      dstdir=`dirname "$dst"`
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
       test -d "$dstdir"
       dstdir_status=$?
     fi
   fi
 
-  case $dstdir in
-    */) dstdirslash=$dstdir;;
-    *)  dstdirslash=$dstdir/;;
-  esac
-
   obsolete_mkdir_used=false
 
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
 
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
 
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
-            # here however when possible just to lower collision chance.
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 
-            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            # Because "mkdir -p" follows existing symlinks and we likely work
-            # directly in world-writeable /tmp, make sure that the '$tmpdir'
-            # directory is successfully created first before we actually test
-            # 'mkdir -p' feature.
-            if (umask $mkdir_umask &&
-                $mkdirprog $mkdir_mode "$tmpdir" &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   test_tmpdir="$tmpdir/a"
-                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
     esac
 
     if
       $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -387,17 +384,19 @@
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
       esac
 
+      eval "$initialize_posix_glob"
+
       oIFS=$IFS
       IFS=/
-      set -f
+      $posix_glob set -f
       set fnord $dstdir
       shift
-      set +f
+      $posix_glob set +f
       IFS=$oIFS
 
       prefixes=
@@ -404,34 +403,34 @@
 
       for d
       do
-        test X"$d" = X && continue
+	test -z "$d" && continue
 
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -444,8 +443,8 @@
   else
 
     # Make a couple of temp file names in the proper directory.
-    dsttmp=${dstdirslash}_inst.$$_
-    rmtmp=${dstdirslash}_rm.$$_
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
@@ -466,12 +465,15 @@
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
+       $posix_glob set +f &&
+
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -484,24 +486,24 @@
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
 
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
@@ -510,9 +512,9 @@
 done
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
 # time-stamp-end: "; # UTC"
 # End:

Modified: trunk/Build/source/utils/asymptote/doc/Makefile.in
===================================================================
--- trunk/Build/source/utils/asymptote/doc/Makefile.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/doc/Makefile.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -65,11 +65,11 @@
 
 asymptote.dvi: $(SOURCE) $(ASYFILES:.asy=.eps) latexusage.pdf
 	ln -sf asymptote.texi asymptote_.texi
-	$(TEXI2DVI) asymptote_.texi
+	-$(TEXI2DVI) asymptote_.texi
 	mv asymptote_.dvi asymptote.dvi
 
 asymptote.pdf: $(SOURCE) $(ASYFILES:.asy=.pdf) latexusage.pdf
-	$(TEXI2DVI) --pdf asymptote.texi
+	-$(TEXI2DVI) --pdf asymptote.texi
 
 CAD.pdf: CAD.tex CAD1.eps 
 	latex CAD

Modified: trunk/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/asy-latex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/asyRefCard.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/asymptote.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/asymptote.texi
===================================================================
--- trunk/Build/source/utils/asymptote/doc/asymptote.texi	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/doc/asymptote.texi	2018-04-03 22:35:04 UTC (rev 47274)
@@ -4,6 +4,8 @@
 @include version.texi
 @finalout
 
+ at codequoteundirected on
+
 @copying
 This file documents @code{Asymptote}, version @value{VERSION}.
 
@@ -366,31 +368,17 @@
 self-extracting @code{Asymptote} executable @code{asymptote-x.xx-setup.exe},
 where @code{x.xx} denotes the latest version.
 
-A working @TeX{} implementation (such as the one available at
+A working @TeX{} implementation (we recommend
+ at url{https://www.tug.org/texlive} or
 @url{http://www.miktex.org}) will be required to typeset labels.
 You will also need to install @code{GPL Ghostscript} version 9.14 or
 later from @url{http://downloads.ghostscript.com/public}.
 
-To view the default @code{PostScript} output, you can install the
+To view @code{PostScript} output, you can install the
 program @code{gsview} available from 
 @url{http://www.cs.wisc.edu/~ghost/gsview/}.
- at cindex @code{psview}
- at anchor{psview}
-A better (and free) @code{PostScript} viewer available at
- at url{http://psview.sourceforge.net/} (which in particular works properly
-in interactive mode) unfortunately currently requires some manual
-configuration. Specifically, if version @code{x.xx} of @code{psview} is
-extracted to the directory @code{c:\Program Files} one needs to put
- at verbatim
-import settings;
-psviewer="c:\Program Files\psview-x.xx\psv.exe";
- at end verbatim
- at noindent
-in the optional @code{Asymptote} configuration file;
- at pxref{configuration file}).
 
 The @code{ImageMagick} package from
-
 @url{http://www.imagemagick.org/script/binary-releases.php} 
 
 @noindent
@@ -428,8 +416,7 @@
 Users of @code{gsview} will need to enable @code{Options/Auto Redisplay}
 (however, under @code{MSDOS} it is still necessary to click on the
 @code{gsview} window; under @code{UNIX} one must manually redisplay by
-pressing the @code{r} key). A better (and free) multiplatform
-alternative to @code{gsview} is @code{psview} (@pxref{psview}).
+pressing the @code{r} key).
 
 @cindex @code{settings}
 @cindex configuration file
@@ -2166,6 +2153,13 @@
 delimited by @code{delimiter} (an empty delimiter signifies a space,
 but with duplicate delimiters discarded);
 
+ at cindex @code{array}
+ at cindex @code{operator +(...string[] a)}.
+ at item string[] array(string s)
+returns an array of strings obtained by splitting @code{s} into
+individual characters. The inverse operation is provided by
+ at code{operator +(...string[] a)}.
+
 @anchor{format}
 @item string format(string s, int n, string locale="")
 @cindex @code{format}
@@ -2174,14 +2168,15 @@
 empty string is specified), following the behaviour of the C function
 @code{fprintf}), except that only one data field is allowed.
 
- at item string format(string s=defaultformat, string s=defaultseparator, real x, string locale="")
+ at item string format(string s=defaultformat, bool forcemath=false, string s=defaultseparator, real x, string locale="")
 returns a string containing @code{x} formatted according to the C-style format
 string @code{s} using locale @code{locale} (or the current locale if an
 empty string is specified), following the behaviour of the C function
 @code{fprintf}), except that only one data field is allowed, trailing
 zeros are removed by default (unless @code{#} is specified), and
-(if the format string specifies math mode) @TeX{} is used to typeset
-scientific notation using the @code{defaultseparator="\!\times\!";};
+if @code{s} specifies math mode or @code{forcemath=true}, @TeX{} is
+used to typeset scientific notation using the
+ at code{defaultseparator="\!\times\!";};
 
 @cindex @code{hex}
 @cindex @code{hexidecimal}
@@ -4465,8 +4460,11 @@
 @cindex @code{CTZ}
 @code{Asymptote} also defines bitwise functions @code{int AND(int,int)},
 @code{int OR(int,int)}, @code{int XOR(int,int)}, @code{int NOT(int)},
- at code{int CLZ(int)} (count leading zeros), and @code{int CTZ(int)}
-(count trailing zeros).
+ at code{int CLZ(int)} (count leading zeros),
+ at code{int CTZ(int)} (count trailing zeros),
+ at code{int popcount(int)} (count bits populated by ones), and
+ at code{int bitreverse(int a, int bits)} (reverse bits within a word of
+length bits).
 
 @node Self & prefix operators, User-defined operators, Arithmetic & logical, Operators
 @subsection Self & prefix operators
@@ -4515,7 +4513,7 @@
 operators on structures and built-in types:
 @verbatim
 - + * / % ^ ! < > == != <= >= & | ^^ .. :: -- --- ++
-<< >> $ $$ @ @@
+<< >> $ $$ @ @@ <>
 @end verbatim
 @noindent
 The operators on the second line have precedence one higher than the
@@ -5293,11 +5291,15 @@
 @code{n} subintervals (otherwise returns a null array);
 
 @cindex @code{find}
- at item int find(bool[], int n=1)
-returns the index of the @code{n}th @code{true} value or -1 if not found.
-If @code{n} is negative, search backwards from the end of the array for the
- at code{-n}th value; 
+ at item int find(bool[] a, int n=1)
+returns the index of the @code{n}th @code{true} value in the boolean array
+ at code{a} or -1 if not found. If @code{n} is negative, search backwards
+from the end of the array for the @code{-n}th value; 
 
+ at cindex @code{findall}
+ at item int[] findall(bool[] a)
+returns the indices of all @code{true} values in the boolean array @code{a}.
+
 @cindex @code{search}
 @item int search(T[] a, T key)
 For built-in ordered types @code{T}, searches a sorted array

Modified: trunk/Build/source/utils/asymptote/doc/install-sh
===================================================================
--- trunk/Build/source/utils/asymptote/doc/install-sh	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/doc/install-sh	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2009-04-28.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,21 +35,25 @@
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
+# `make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
-tab='	'
 nl='
 '
-IFS=" $tab$nl"
+IFS=" ""	$nl"
 
-# Set DOITPROG to "echo" to test this script.
+# set DOITPROG to echo to test this script
 
+# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-doit_exec=${doit:-exec}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -64,6 +68,17 @@
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -82,7 +97,7 @@
 dst_arg=
 
 copy_on_change=false
-is_target_a_directory=possibly
+no_target_directory=
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -122,41 +137,36 @@
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift;;
+	shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
+    -t) dst_arg=$2
+	shift;;
 
-    -T) is_target_a_directory=never;;
+    -T) no_target_directory=true;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --) shift
-        break;;
+    --)	shift
+	break;;
 
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
 
     *)  break;;
   esac
@@ -163,16 +173,6 @@
   shift
 done
 
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -186,10 +186,6 @@
     fi
     shift # arg
     dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
   done
 fi
 
@@ -198,27 +194,14 @@
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call 'install-sh -d' without argument.
+  # It's OK to call `install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
+  trap '(exit $?); exit' 1 2 13 15
 
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
   case $mode in
@@ -228,16 +211,16 @@
 
     *[0-7])
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw='% 200'
+	u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw=,u+rw
+	u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -245,9 +228,9 @@
 
 for src
 do
-  # Protect names problematic for 'test' and other utilities.
+  # Protect names starting with `-'.
   case $src in
-    -* | [=\(\)!]) src=./$src;;
+    -*) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -269,115 +252,129 @@
       echo "$0: no destination specified." >&2
       exit 1
     fi
+
     dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
 
-    # If destination is a directory, append the input filename.
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
       fi
       dstdir=$dst
-      dstbase=`basename "$src"`
-      case $dst in
-	*/) dst=$dst$dstbase;;
-	*)  dst=$dst/$dstbase;;
-      esac
+      dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      dstdir=`dirname "$dst"`
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
       test -d "$dstdir"
       dstdir_status=$?
     fi
   fi
 
-  case $dstdir in
-    */) dstdirslash=$dstdir;;
-    *)  dstdirslash=$dstdir/;;
-  esac
-
   obsolete_mkdir_used=false
 
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
 
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
 
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
-            # here however when possible just to lower collision chance.
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 
-            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            # Because "mkdir -p" follows existing symlinks and we likely work
-            # directly in world-writeable /tmp, make sure that the '$tmpdir'
-            # directory is successfully created first before we actually test
-            # 'mkdir -p' feature.
-            if (umask $mkdir_umask &&
-                $mkdirprog $mkdir_mode "$tmpdir" &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   test_tmpdir="$tmpdir/a"
-                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
     esac
 
     if
       $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -387,17 +384,19 @@
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
       esac
 
+      eval "$initialize_posix_glob"
+
       oIFS=$IFS
       IFS=/
-      set -f
+      $posix_glob set -f
       set fnord $dstdir
       shift
-      set +f
+      $posix_glob set +f
       IFS=$oIFS
 
       prefixes=
@@ -404,34 +403,34 @@
 
       for d
       do
-        test X"$d" = X && continue
+	test -z "$d" && continue
 
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -444,8 +443,8 @@
   else
 
     # Make a couple of temp file names in the proper directory.
-    dsttmp=${dstdirslash}_inst.$$_
-    rmtmp=${dstdirslash}_rm.$$_
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
@@ -466,12 +465,15 @@
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
+       $posix_glob set +f &&
+
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -484,24 +486,24 @@
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
 
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
@@ -510,9 +512,9 @@
 done
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
 # time-stamp-end: "; # UTC"
 # End:

Modified: trunk/Build/source/utils/asymptote/doc/png/asymptote.info
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/drawelement.h
===================================================================
--- trunk/Build/source/utils/asymptote/drawelement.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/drawelement.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -22,8 +22,10 @@
 
 namespace camp {
 
-extern double T[3]; // z-component of current transform
-  
+//extern double Tx[3]; // x-component of current transform
+//extern double Ty[3]; // y-component of current transform
+extern double Tz[3]; // z-component of current transform
+
 static const double pixel=1.0; // Adaptive rendering constant.
 
 // Return one-sixth of the second derivative of the Bezier curve defined

Modified: trunk/Build/source/utils/asymptote/drawsurface.cc
===================================================================
--- trunk/Build/source/utils/asymptote/drawsurface.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/drawsurface.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -17,7 +17,9 @@
 
 const triple drawElement::zero;
 
-double T[3]; // z-component of current transform
+//double Tx[3]; // x-component of current transform
+//double Ty[3]; // y-component of current transform
+double Tz[3]; // z-component of current transform
 
 using vm::array;
 
@@ -65,7 +67,7 @@
   if(!colors && (diffuse != lastdiffuse || ambient != lastambient || 
                  emissive != lastemissive || specular != lastspecular ||
                  shininess != lastshininess)) {
-    drawBezierPatch::S.draw();
+    drawBezierPatch::S.draw(); 
     lastdiffuse=diffuse;
     lastambient=ambient;
     lastemissive=emissive;
@@ -278,9 +280,20 @@
   glGetDoublev(GL_MODELVIEW_MATRIX,t);
 // Like Fortran, OpenGL uses transposed (column-major) format!
   run::transpose(t,4);
-  T[0]=t[8];
-  T[1]=t[9];
-  T[2]=t[10];
+/*  
+  Tx[0]=t[0];
+  Tx[1]=t[1];
+  Tx[2]=t[2];
+  
+  Ty[0]=t[4];
+  Ty[1]=t[5];
+  Ty[2]=t[6];
+*/
+  
+  Tz[0]=t[8];
+  Tz[1]=t[9];
+  Tz[2]=t[10];
+  
   run::inverse(t,4);
   bbox3 box(m,M);
   box.transform(t);
@@ -505,9 +518,20 @@
   glGetDoublev(GL_MODELVIEW_MATRIX,t);
 // Like Fortran, OpenGL uses transposed (column-major) format!
   run::transpose(t,4);
-  T[0]=t[8];
-  T[1]=t[9];
-  T[2]=t[10];
+/*  
+  Tx[0]=t[0];
+  Tx[1]=t[1];
+  Tx[2]=t[2];
+  
+  Ty[0]=t[4];
+  Ty[1]=t[5];
+  Ty[2]=t[6];
+*/
+  
+  Tz[0]=t[8];
+  Tz[1]=t[9];
+  Tz[2]=t[10];
+
   run::inverse(t,4);
   bbox3 box(m,M);
   box.transform(t);

Added: trunk/Build/source/utils/asymptote/examples/linearregression.asy
===================================================================
--- trunk/Build/source/utils/asymptote/examples/linearregression.asy	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/examples/linearregression.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,64 @@
+import graph3;
+import math;  // for the leastsquares routine
+
+Billboard.targetsize = true;  // Perspective should not affect the labels.
+currentprojection = perspective(60 * (5, 2, 3));
+
+file duncan = input("linearregression.dat");
+
+string headers = duncan;
+
+real[][] independentvars;
+real[] dependentvars;
+
+while (!eof(duncan)) {
+  string line = duncan;
+  string[] entries = split(line);
+  if (entries.length < 5) continue;
+  string type = entries[1];
+  real income = (real)(entries[2]);
+  real education = (real)(entries[3]);
+  real prestige = (real)(entries[4]);
+
+  // include 1.0 for the residue
+  independentvars.push(new real[] {income, education, 1.0});
+  dependentvars.push(prestige);
+}
+
+real[] coeffs = leastsquares(independentvars, dependentvars, warn=false);
+if (coeffs.length == 0) {
+  abort("Unable to find regression: independent variables are "
+    + "linearly dependent.");
+}
+
+real f(pair xy) {
+  return coeffs[0] * xy.x  // income
+       + coeffs[1] * xy.y  // education
+       + coeffs[2];        // residue
+}
+
+real xmin = infinity, xmax = -infinity, ymin = infinity, ymax = -infinity;
+for (real[] row : independentvars) {
+  if (row[0] < xmin) xmin = row[0];
+  if (row[0] > xmax) xmax = row[0];
+  if (row[1] < ymin) ymin = row[1];
+  if (row[1] > ymax) ymax = row[1];
+}
+
+// Draw the plane
+draw(surface(f, (xmin, ymin), (xmax, ymax)),
+     surfacepen=emissive(blue + opacity(0.6)),
+     meshpen = blue);
+
+for (int ii = 0; ii < independentvars.length; ++ii) {
+  triple pt = (independentvars[ii][0], independentvars[ii][1],
+           dependentvars[ii]);
+  draw(shift(pt) * unitsphere, material(yellow, emissivepen=0.2*yellow));
+  real z = f((pt.x, pt.y));
+  if (pt.z > z) draw (pt -- (pt.x, pt.y, z), green);
+  else draw(pt -- (pt.x, pt.y, z), red);
+}
+
+xaxis3("income", Bounds(Min, Min), InTicks);
+yaxis3("education", Bounds(Min, Min), InTicks);
+zaxis3("prestige", Bounds(Min, Min), InTicks);

Modified: trunk/Build/source/utils/asymptote/examples/venn.asy
===================================================================
--- trunk/Build/source/utils/asymptote/examples/venn.asy	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/examples/venn.asy	2018-04-03 22:35:04 UTC (rev 47274)
@@ -34,4 +34,3 @@
 draw(z--z2,Arrow,Margin(0,m));
 
 shipout(bbox(0.25cm));
-currentpicture.uptodate=true;

Modified: trunk/Build/source/utils/asymptote/exp.cc
===================================================================
--- trunk/Build/source/utils/asymptote/exp.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/exp.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -39,8 +39,9 @@
 #endif
 
 void exp::transAsType(coenv &e, types::ty *target) {
-  types::ty *t=trans(e);
-  assert(t->kind==ty_error || equivalent(t,target));
+  trans(e);
+//  types::ty *t=trans(e);
+//  assert(t->kind==ty_error || equivalent(t,target));
 }
 
 void exp::transToType(coenv &e, types::ty *target)

Modified: trunk/Build/source/utils/asymptote/fileio.cc
===================================================================
--- trunk/Build/source/utils/asymptote/fileio.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/fileio.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -145,8 +145,11 @@
       }
     }
   }
-  size_t pos=s.length()-1;
-  if(s[pos] == '\r') s.erase(pos,1);
+  size_t n=s.length();
+  if(n > 0) {
+    size_t pos=n-1;
+    if(s[pos] == '\r') s.erase(pos,1);
+  }
   val=whitespace+s;
 }
   

Modified: trunk/Build/source/utils/asymptote/fpu.h
===================================================================
--- trunk/Build/source/utils/asymptote/fpu.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/fpu.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,11 +1,7 @@
 #ifndef FPU_H
 #define FPU_H
 
-#ifdef HAVE_FENV_H
-#ifdef _GNU_SOURCE
-#define HAVE_FEENABLEEXCEPT
-#endif
-#endif
+#include "common.h"
 
 #ifdef HAVE_FEENABLEEXCEPT
 #include <fenv.h>

Deleted: trunk/Build/source/utils/asymptote/gc-7.6.0.tar.gz
===================================================================
(Binary files differ)

Added: trunk/Build/source/utils/asymptote/gc-7.6.2.tar.gz
===================================================================
(Binary files differ)

Index: trunk/Build/source/utils/asymptote/gc-7.6.2.tar.gz
===================================================================
--- trunk/Build/source/utils/asymptote/gc-7.6.2.tar.gz	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/gc-7.6.2.tar.gz	2018-04-03 22:35:04 UTC (rev 47274)

Property changes on: trunk/Build/source/utils/asymptote/gc-7.6.2.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/glrender.cc
===================================================================
--- trunk/Build/source/utils/asymptote/glrender.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/glrender.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -4,6 +4,8 @@
  * Render 3D Bezier paths and surfaces.
  *****/
 
+#define _POSIX_C_SOURCE 200809L
+
 #include <stdlib.h>
 #include <fstream>
 #include <cstring>
@@ -1442,13 +1444,13 @@
       osmesa_initialized=true;
       init_osmesa();
     }
-  } else {
-    if(glinitialize) {
-      glinitialize=false;
-      init();
-      Fitscreen=1;
-    }
   }
+  
+  if(glinitialize) {
+    glinitialize=false;
+    init();
+    Fitscreen=1;
+  }
 
   static bool initialized=false;
   if(!initialized || !interact::interactive) {

Modified: trunk/Build/source/utils/asymptote/install-sh
===================================================================
--- trunk/Build/source/utils/asymptote/install-sh	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/install-sh	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2009-04-28.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,21 +35,25 @@
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
+# `make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
-tab='	'
 nl='
 '
-IFS=" $tab$nl"
+IFS=" ""	$nl"
 
-# Set DOITPROG to "echo" to test this script.
+# set DOITPROG to echo to test this script
 
+# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-doit_exec=${doit:-exec}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -64,6 +68,17 @@
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -82,7 +97,7 @@
 dst_arg=
 
 copy_on_change=false
-is_target_a_directory=possibly
+no_target_directory=
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -122,41 +137,36 @@
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift;;
+	shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
+    -t) dst_arg=$2
+	shift;;
 
-    -T) is_target_a_directory=never;;
+    -T) no_target_directory=true;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --) shift
-        break;;
+    --)	shift
+	break;;
 
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
 
     *)  break;;
   esac
@@ -163,16 +173,6 @@
   shift
 done
 
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -186,10 +186,6 @@
     fi
     shift # arg
     dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
   done
 fi
 
@@ -198,27 +194,14 @@
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call 'install-sh -d' without argument.
+  # It's OK to call `install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
+  trap '(exit $?); exit' 1 2 13 15
 
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
   case $mode in
@@ -228,16 +211,16 @@
 
     *[0-7])
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw='% 200'
+	u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw=,u+rw
+	u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -245,9 +228,9 @@
 
 for src
 do
-  # Protect names problematic for 'test' and other utilities.
+  # Protect names starting with `-'.
   case $src in
-    -* | [=\(\)!]) src=./$src;;
+    -*) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -269,115 +252,129 @@
       echo "$0: no destination specified." >&2
       exit 1
     fi
+
     dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
 
-    # If destination is a directory, append the input filename.
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
       fi
       dstdir=$dst
-      dstbase=`basename "$src"`
-      case $dst in
-	*/) dst=$dst$dstbase;;
-	*)  dst=$dst/$dstbase;;
-      esac
+      dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      dstdir=`dirname "$dst"`
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
       test -d "$dstdir"
       dstdir_status=$?
     fi
   fi
 
-  case $dstdir in
-    */) dstdirslash=$dstdir;;
-    *)  dstdirslash=$dstdir/;;
-  esac
-
   obsolete_mkdir_used=false
 
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
 
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
 
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
-            # here however when possible just to lower collision chance.
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 
-            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            # Because "mkdir -p" follows existing symlinks and we likely work
-            # directly in world-writeable /tmp, make sure that the '$tmpdir'
-            # directory is successfully created first before we actually test
-            # 'mkdir -p' feature.
-            if (umask $mkdir_umask &&
-                $mkdirprog $mkdir_mode "$tmpdir" &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   test_tmpdir="$tmpdir/a"
-                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
     esac
 
     if
       $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -387,17 +384,19 @@
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
       esac
 
+      eval "$initialize_posix_glob"
+
       oIFS=$IFS
       IFS=/
-      set -f
+      $posix_glob set -f
       set fnord $dstdir
       shift
-      set +f
+      $posix_glob set +f
       IFS=$oIFS
 
       prefixes=
@@ -404,34 +403,34 @@
 
       for d
       do
-        test X"$d" = X && continue
+	test -z "$d" && continue
 
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -444,8 +443,8 @@
   else
 
     # Make a couple of temp file names in the proper directory.
-    dsttmp=${dstdirslash}_inst.$$_
-    rmtmp=${dstdirslash}_rm.$$_
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
 
     # Trap to clean up those temp files at exit.
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
@@ -466,12 +465,15 @@
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
+       $posix_glob set +f &&
+
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -484,24 +486,24 @@
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
 
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
@@ -510,9 +512,9 @@
 done
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
 # time-stamp-end: "; # UTC"
 # End:

Modified: trunk/Build/source/utils/asymptote/lex.yy.cc
===================================================================
--- trunk/Build/source/utils/asymptote/lex.yy.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/lex.yy.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -18,7 +18,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_SUBMINOR_VERSION 1
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -118,25 +118,13 @@
 /* %if-c++-only */
 /* %endif */
 
-#ifdef __cplusplus
+/* TODO: this is always defined, so inline it */
+#define yyconst const
 
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
+#if defined(__GNUC__) && __GNUC__ >= 3
+#define yynoreturn __attribute__((__noreturn__))
 #else
-#define yyconst
+#define yynoreturn
 #endif
 
 /* %not-for-header */
@@ -211,7 +199,7 @@
 #endif
 
 /* %if-not-reentrant */
-extern yy_size_t yyleng;
+extern int yyleng;
 /* %endif */
 
 /* %if-c-only */
@@ -260,12 +248,12 @@
 	/* Size of input buffer in bytes, not including room for EOB
 	 * characters.
 	 */
-	yy_size_t yy_buf_size;
+	int yy_buf_size;
 
 	/* Number of characters read into yy_ch_buf, not including EOB
 	 * characters.
 	 */
-	yy_size_t yy_n_chars;
+	int yy_n_chars;
 
 	/* Whether we "own" the buffer - i.e., we know we created it,
 	 * and can realloc() it to grow it, and should free() it to
@@ -321,7 +309,7 @@
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -349,11 +337,11 @@
 
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
-yy_size_t yyleng;
+static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+int yyleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
+static char *yy_c_buf_p = NULL;
 static int yy_init = 0;		/* whether we need to initialize */
 static int yy_start = 0;	/* start state number */
 
@@ -381,7 +369,7 @@
 
 YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
 YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );
 
 /* %endif */
 
@@ -419,7 +407,7 @@
 
 typedef unsigned char YY_CHAR;
 
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+FILE *yyin = NULL, *yyout = NULL;
 
 typedef int yy_state_type;
 
@@ -440,10 +428,7 @@
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
-static void yy_fatal_error (yyconst char msg[]  );
+static void yynoreturn yy_fatal_error (yyconst char* msg  );
 
 /* %endif */
 
@@ -453,7 +438,7 @@
 #define YY_DO_BEFORE_ACTION \
 	(yytext_ptr) = yy_bp; \
 /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-	yyleng = (size_t) (yy_cp - yy_bp); \
+	yyleng = (int) (yy_cp - yy_bp); \
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
@@ -556,43 +541,43 @@
 static yyconst flex_uint16_t yy_base[344] =
     {   0,
         0,    0,   60,   62,   64,   69,   74,   79,    0,    0,
-      112,    0,  539,  540,  540,  540,  535,  511,  540,  510,
-      527,  508,  523,  540,  540,  540,   66,   69,  540,   70,
-       83,   72,  157,  509,  540,   63,  505,   67,  540,  501,
-        0,  540,   96,  540,  150,  142,  478,  133,  480,  137,
-      148,  157,  146,  478,   55,  472,  485,  471,  150,  476,
-      480,  540,  461,  540,  540,  540,  540,  517,  500,  504,
-      540,  540,  514,  203,  207,  540,  540,  513,  213,  244,
-      540,  540,  540,  540,  512,  488,  540,  505,  498,  496,
-      493,  491,  485,   85,  481,  194,  477,    0,  219,  470,
+      112,    0,  541,  542,  542,  542,  537,  513,  542,  512,
+      529,  510,  525,  542,  542,  542,   66,   69,  542,   70,
+       83,   72,  157,  511,  542,   83,  507,   62,  542,  503,
+        0,  542,   90,  542,  150,  142,  480,  133,  482,   54,
+      148,  147,  146,  480,  147,  474,  487,  473,  162,  478,
+      482,  542,  463,  542,  542,  542,  542,  519,  502,  506,
+      542,  542,  516,  203,  212,  542,  542,  515,  219,  250,
+      542,  542,  542,  542,  514,  490,  542,  507,  500,  498,
+      495,  493,  487,  185,  483,  156,  479,    0,  223,  472,
 
-      540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
-      540,  487,  540,  207,  211,  540,    0,  540,  217,  223,
-      239,  540,  540,  540,  540,    0,  500,  540,  540,  464,
-      462,  455,  459,  451,  446,  458,    0,  443,  445,  448,
-      441,  443,    0,  441,  451,  432,  442,  446,  442,  447,
-      435,  200,  198,  435,  438,  426,  430,  427,  434,  540,
-      540,  540,  540,  540,  265,  300,  540,  270,  473,  540,
-      540,  540,  306,  312,  540,  275,  472,  540,  262,  266,
-      540,  540,  540,  540,  540,  540,  540,  304,  540,  540,
-      540,  540,  457,    0,  470,  540,  272,  307,    0,  320,
+      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
+      542,  489,  542,  211,  217,  542,    0,  542,  222,  228,
+      243,  542,  542,  542,  542,    0,  502,  542,  542,  466,
+      464,  457,  461,  453,  448,  460,    0,  445,  447,  450,
+      443,  445,    0,  443,  453,  434,  444,  448,  444,  449,
+      437,  182,  215,  437,  440,  428,  432,  429,  436,  542,
+      542,  542,  542,  542,  271,  306,  542,  276,  475,  542,
+      542,  542,  312,  318,  542,  281,  474,  542,  268,  272,
+      542,  542,  542,  542,  542,  542,  542,  310,  542,  542,
+      542,  542,  459,    0,  472,  542,  278,  313,    0,  326,
 
-      310,  331,  339,  315,  432,    0,  431,  434,  416,  423,
-      422,  426,  420,  412,    0,  417,  414,  416,  419,  414,
-      407,  402,  411,  402,  401,  399,  399,  397,  398,  397,
-      408,  407,  410,  400,  360,  366,  268,  540,  358,  369,
-      380,  361,  392,  407,  398,  175,    0,  401,    0,  397,
-      399,    0,  387,  383,  385,    0,  399,  398,  390,  392,
-      380,  379,  386,  389,  364,    0,    0,  367,  349,  358,
-      540,  540,  388,  391,  344,  342,    0,  345,  339,    0,
-      347,    0,  323,  336,  337,  314,  312,  320,    0,  314,
-      308,  311,  291,  295,  282,  281,    0,    0,  266,  259,
+      316,  337,  345,  321,  434,    0,  433,  436,  418,  425,
+      424,  428,  422,  414,    0,  419,  416,  418,  421,  416,
+      409,  404,  413,  404,  403,  401,  401,  399,  400,  399,
+      410,  409,  412,  402,  366,  372,  274,  542,  364,  375,
+      386,  367,  394,  409,  400,  204,    0,  403,    0,  399,
+      401,    0,  389,  385,  387,    0,  401,  400,  392,  393,
+      362,  361,  367,  366,  359,    0,    0,  361,  343,  353,
+      542,  542,  394,  397,  339,  330,    0,  334,  331,    0,
+      335,    0,  318,  325,  327,  308,  302,  312,    0,  306,
+      281,  289,  272,  271,  273,  271,    0,    0,  253,  248,
 
-      262,  262,    0,  260,  250,  236,  235,    0,  232,    0,
-        0,    0,  219,  221,  213,    0,  202,  178,  159,    0,
-      162,  142,    0,  135,    0,    0,    0,    0,    0,    0,
-        0,    0,  143,   69,    0,  540,  413,  416,  419,  422,
-       68,   66,  425
+      245,  238,    0,  236,  226,  221,  227,    0,  221,    0,
+        0,    0,  194,  187,  179,    0,  179,  165,  155,    0,
+      163,  141,    0,  137,    0,    0,    0,    0,    0,    0,
+        0,    0,   66,   61,    0,  542,  419,  422,  425,  428,
+       68,   66,  431
     } ;
 
 static yyconst flex_int16_t yy_def[344] =
@@ -637,7 +622,7 @@
       336,  336,  336
     } ;
 
-static yyconst flex_uint16_t yy_nxt[603] =
+static yyconst flex_uint16_t yy_nxt[605] =
     {   0,
        14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
        24,   25,   26,   27,   28,   29,   30,   31,   32,   33,
@@ -647,11 +632,11 @@
        57,   58,   59,   60,   41,   61,   41,   41,   62,   63,
        64,   65,   67,   68,   67,   68,   72,   73,  194,   74,
       126,   72,   73,   69,   74,   69,   77,   78,   70,  108,
-       70,   77,   78,  110,   79,  116,  112,  105,  123,   79,
-      117,  109,  125,  105,  111,  113,   75,  118,  102,  127,
+       70,   77,   78,  110,   79,  116,  112,  125,  105,   79,
+      117,  109,  102,  127,  111,  113,   75,  118,  138,  335,
 
-      114,   75,  115,  115,  115,  149,   80,  335,  150,  191,
-      190,   80,   82,   83,   84,   85,   86,   82,   87,   88,
+      114,   75,  115,  115,  115,  334,   80,  105,  123,  105,
+      139,   80,   82,   83,   84,   85,   86,   82,   87,   88,
        87,   87,   82,   82,   82,   89,   90,   82,   91,   92,
        87,   82,   82,   82,   93,   82,   94,   95,   96,   82,
        97,   98,   98,   82,   99,   82,  100,   98,   98,   98,
@@ -658,57 +643,57 @@
        98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
        98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
        82,   87,   82,  101,  119,  128,  120,  120,  120,  130,
-      134,  138,  334,  140,  129,  146,  135,  333,  131,  154,
-      136,  155,  332,  139,  132,  141,  121,  143,  142,  147,
+      134,  190,  191,  140,  129,  146,  135,  143,  131,  333,
+      136,  332,  144,  145,  132,  141,  121,  149,  142,  147,
 
-      156,  331,  144,  145,  165,  165,  166,  157,  167,  164,
-      169,  330,  170,  167,  173,  173,  174,  278,  175,  190,
-      191,  189,  195,  175,  197,  279,  198,  198,  198,  329,
-      115,  115,  115,  227,  200,  168,  201,  201,  201,  171,
-      119,  328,  120,  120,  120,  176,  172,  177,  228,  178,
-      121,  225,  226,  203,  178,  203,  202,  327,  204,  204,
-      204,  326,  121,  179,  180,  325,  165,  165,  166,  324,
-      167,  178,  165,  166,  323,  167,  178,  173,  174,  181,
-      182,  237,  237,  322,  183,  238,  238,  271,  271,  200,
-      184,  198,  198,  198,  185,  321,  186,  168,  187,  320,
+      150,  154,  331,  155,  165,  165,  166,  330,  167,  191,
+      190,  191,  156,  167,  164,  169,  329,  170,  328,  157,
+      173,  173,  174,  327,  175,  189,  195,  326,  197,  175,
+      198,  198,  198,  225,  226,  168,  115,  115,  115,  200,
+      325,  201,  201,  201,  171,  119,  278,  120,  120,  120,
+      227,  176,  172,  177,  279,  178,  121,  203,  324,  203,
+      178,  202,  204,  204,  204,  228,  323,  121,  322,  179,
+      180,  321,  165,  165,  166,  320,  167,  178,  165,  166,
+      319,  167,  178,  173,  174,  181,  182,  237,  237,  318,
+      183,  238,  238,  271,  271,  200,  184,  198,  198,  198,
 
-      188,  165,  235,  166,  319,  167,  318,  173,  173,  174,
-      167,  175,  317,  173,  236,  174,  175,  175,  316,  239,
-      315,  314,  175,  239,  239,  239,  198,  198,  198,  201,
-      201,  201,  168,  239,  204,  204,  204,  200,  176,  198,
-      198,  198,  313,  312,  176,  241,  121,  241,  311,  240,
-      242,  242,  242,  203,  310,  203,  309,  308,  204,  204,
-      204,  165,  165,  166,  307,  167,  306,  173,  173,  174,
-      167,  175,  305,  272,  304,  303,  175,  272,  272,  272,
-      242,  242,  242,  273,  302,  273,  301,  272,  274,  274,
-      274,  300,  168,  299,  241,  298,  241,  297,  176,  242,
+      185,  317,  186,  168,  187,  316,  188,  165,  235,  166,
+      315,  167,  314,  173,  173,  174,  167,  175,  313,  173,
+      236,  174,  175,  175,  312,  239,  311,  310,  175,  239,
+      239,  239,  198,  198,  198,  201,  201,  201,  168,  239,
+      204,  204,  204,  200,  176,  198,  198,  198,  309,  308,
+      176,  241,  121,  241,  307,  240,  242,  242,  242,  203,
+      306,  203,  305,  304,  204,  204,  204,  165,  165,  166,
+      303,  167,  302,  173,  173,  174,  167,  175,  301,  272,
+      300,  299,  175,  272,  272,  272,  242,  242,  242,  273,
+      298,  273,  297,  272,  274,  274,  274,  296,  168,  295,
 
-      242,  242,  273,  296,  273,  295,  294,  274,  274,  274,
-      274,  274,  274,   66,   66,   66,   71,   71,   71,   76,
-       76,   76,   81,   81,   81,  199,  293,  199,  292,  291,
-      290,  289,  288,  287,  286,  285,  284,  283,  282,  281,
-      280,  277,  276,  275,  270,  269,  268,  267,  266,  265,
-      264,  263,  262,  261,  260,  259,  258,  257,  256,  255,
-      254,  253,  252,  251,  250,  249,  248,  247,  246,  245,
-      244,  243,  189,  190,  172,  164,  234,  233,  232,  231,
-      230,  229,  224,  223,  222,  221,  220,  219,  218,  217,
-      216,  215,  214,  213,  212,  211,  210,  209,  208,  207,
+      241,  294,  241,  293,  176,  242,  242,  242,  273,  292,
+      273,  291,  290,  274,  274,  274,  274,  274,  274,   66,
+       66,   66,   71,   71,   71,   76,   76,   76,   81,   81,
+       81,  199,  289,  199,  288,  287,  286,  285,  284,  283,
+      282,  281,  280,  277,  276,  275,  270,  269,  268,  267,
+      266,  265,  264,  263,  262,  261,  260,  259,  258,  257,
+      256,  255,  254,  253,  252,  251,  250,  249,  248,  247,
+      246,  245,  244,  243,  189,  190,  172,  164,  234,  233,
+      232,  231,  230,  229,  224,  223,  222,  221,  220,  219,
+      218,  217,  216,  215,  214,  213,  212,  211,  210,  209,
 
-      206,  205,  102,  196,  190,  191,  190,  190,  190,  193,
-      190,  192,  191,  190,  189,  172,  164,  163,  162,  161,
-      160,  159,  158,  153,  152,  151,  148,  137,  133,  105,
-      124,  122,  107,  106,  105,  104,  103,  102,  336,   13,
+      208,  207,  206,  205,  102,  196,  190,  191,  190,  190,
+      190,  193,  190,  192,  191,  190,  189,  172,  164,  163,
+      162,  161,  160,  159,  158,  153,  152,  151,  148,  137,
+      133,  105,  124,  122,  107,  106,  105,  104,  103,  102,
+      336,   13,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
 
-      336,  336
+      336,  336,  336,  336
     } ;
 
-static yyconst flex_int16_t yy_chk[603] =
+static yyconst flex_int16_t yy_chk[605] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -718,11 +703,11 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    3,    3,    4,    4,    5,    5,  342,    5,
       341,    6,    6,    3,    6,    4,    7,    7,    3,   27,
-        4,    8,    8,   28,    7,   32,   30,   36,   36,    8,
-       32,   27,   38,   38,   28,   30,    5,   32,   43,   43,
+        4,    8,    8,   28,    7,   32,   30,   38,   38,    8,
+       32,   27,   43,   43,   28,   30,    5,   32,   50,  334,
 
-       31,    6,   31,   31,   31,   55,    7,  334,   55,   94,
-       94,    8,   11,   11,   11,   11,   11,   11,   11,   11,
+       31,    6,   31,   31,   31,  333,    7,   36,   36,   36,
+       50,    8,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
@@ -729,54 +714,54 @@
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
        11,   11,   11,   11,   33,   45,   33,   33,   33,   46,
-       48,   50,  333,   51,   45,   53,   48,  324,   46,   59,
-       48,   59,  322,   50,   46,   51,   33,   52,   51,   53,
+       48,   96,   96,   51,   45,   53,   48,   52,   46,  324,
+       48,  322,   52,   52,   46,   51,   33,   55,   51,   53,
 
-       59,  321,   52,   52,   74,   74,   74,   59,   74,   75,
-       75,  319,   75,   74,   79,   79,   79,  246,   79,   96,
-       96,   99,   99,   79,  114,  246,  114,  114,  114,  318,
-      115,  115,  115,  153,  119,   74,  119,  119,  119,   75,
-      120,  317,  120,  120,  120,   79,   80,   80,  153,   80,
-      115,  152,  152,  121,   80,  121,  119,  315,  121,  121,
-      121,  314,  120,   80,   80,  313,  165,  165,  165,  309,
-      165,   80,  168,  168,  307,  165,   80,  176,  176,   80,
-       80,  179,  179,  306,   80,  180,  180,  237,  237,  197,
-       80,  197,  197,  197,   80,  305,   80,  165,   80,  304,
+       55,   59,  321,   59,   74,   74,   74,  319,   74,   94,
+       94,   94,   59,   74,   75,   75,  318,   75,  317,   59,
+       79,   79,   79,  315,   79,   99,   99,  314,  114,   79,
+      114,  114,  114,  152,  152,   74,  115,  115,  115,  119,
+      313,  119,  119,  119,   75,  120,  246,  120,  120,  120,
+      153,   79,   80,   80,  246,   80,  115,  121,  309,  121,
+       80,  119,  121,  121,  121,  153,  307,  120,  306,   80,
+       80,  305,  165,  165,  165,  304,  165,   80,  168,  168,
+      302,  165,   80,  176,  176,   80,   80,  179,  179,  301,
+       80,  180,  180,  237,  237,  197,   80,  197,  197,  197,
 
-       80,  166,  166,  166,  302,  166,  301,  173,  173,  173,
-      166,  173,  300,  174,  174,  174,  173,  174,  299,  188,
-      296,  295,  174,  188,  188,  188,  198,  198,  198,  201,
-      201,  201,  166,  188,  204,  204,  204,  200,  173,  200,
-      200,  200,  294,  293,  174,  202,  198,  202,  292,  201,
-      202,  202,  202,  203,  291,  203,  290,  288,  203,  203,
-      203,  235,  235,  235,  287,  235,  286,  236,  236,  236,
-      235,  236,  285,  239,  284,  283,  236,  239,  239,  239,
-      242,  242,  242,  240,  281,  240,  279,  239,  240,  240,
-      240,  278,  235,  276,  241,  275,  241,  270,  236,  241,
+       80,  300,   80,  165,   80,  299,   80,  166,  166,  166,
+      296,  166,  295,  173,  173,  173,  166,  173,  294,  174,
+      174,  174,  173,  174,  293,  188,  292,  291,  174,  188,
+      188,  188,  198,  198,  198,  201,  201,  201,  166,  188,
+      204,  204,  204,  200,  173,  200,  200,  200,  290,  288,
+      174,  202,  198,  202,  287,  201,  202,  202,  202,  203,
+      286,  203,  285,  284,  203,  203,  203,  235,  235,  235,
+      283,  235,  281,  236,  236,  236,  235,  236,  279,  239,
+      278,  276,  236,  239,  239,  239,  242,  242,  242,  240,
+      275,  240,  270,  239,  240,  240,  240,  269,  235,  268,
 
-      241,  241,  273,  269,  273,  268,  265,  273,  273,  273,
-      274,  274,  274,  337,  337,  337,  338,  338,  338,  339,
-      339,  339,  340,  340,  340,  343,  264,  343,  263,  262,
-      261,  260,  259,  258,  257,  255,  254,  253,  251,  250,
-      248,  245,  244,  243,  234,  233,  232,  231,  230,  229,
-      228,  227,  226,  225,  224,  223,  222,  221,  220,  219,
-      218,  217,  216,  214,  213,  212,  211,  210,  209,  208,
-      207,  205,  195,  193,  177,  169,  159,  158,  157,  156,
-      155,  154,  151,  150,  149,  148,  147,  146,  145,  144,
-      142,  141,  140,  139,  138,  136,  135,  134,  133,  132,
+      241,  265,  241,  264,  236,  241,  241,  241,  273,  263,
+      273,  262,  261,  273,  273,  273,  274,  274,  274,  337,
+      337,  337,  338,  338,  338,  339,  339,  339,  340,  340,
+      340,  343,  260,  343,  259,  258,  257,  255,  254,  253,
+      251,  250,  248,  245,  244,  243,  234,  233,  232,  231,
+      230,  229,  228,  227,  226,  225,  224,  223,  222,  221,
+      220,  219,  218,  217,  216,  214,  213,  212,  211,  210,
+      209,  208,  207,  205,  195,  193,  177,  169,  159,  158,
+      157,  156,  155,  154,  151,  150,  149,  148,  147,  146,
+      145,  144,  142,  141,  140,  139,  138,  136,  135,  134,
 
-      131,  130,  127,  112,  100,   97,   95,   93,   92,   91,
-       90,   89,   88,   86,   85,   78,   73,   70,   69,   68,
-       63,   61,   60,   58,   57,   56,   54,   49,   47,   40,
-       37,   34,   23,   22,   21,   20,   18,   17,   13,  336,
+      133,  132,  131,  130,  127,  112,  100,   97,   95,   93,
+       92,   91,   90,   89,   88,   86,   85,   78,   73,   70,
+       69,   68,   63,   61,   60,   58,   57,   56,   54,   49,
+       47,   40,   37,   34,   23,   22,   21,   20,   18,   17,
+       13,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
       336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
-      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
 
-      336,  336
+      336,  336,  336,  336
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1012,7 +997,7 @@
 
 
 
-#line 1016 "lex.yy.cc"
+#line 1001 "lex.yy.cc"
 
 #define INITIAL 0
 #define lexcomment 1
@@ -1069,7 +1054,7 @@
 
 void yyset_out  (FILE * _out_str  );
 
-yy_size_t yyget_leng (void );
+			int yyget_leng (void );
 
 char *yyget_text (void );
 
@@ -1145,7 +1130,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1160,7 +1145,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		int n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1173,7 +1158,7 @@
 	else \
 		{ \
 		errno=0; \
-		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
 			{ \
 			if( errno != EINTR) \
 				{ \
@@ -1305,7 +1290,7 @@
 #line 209 "camp.l"
 
 
-#line 1309 "lex.yy.cc"
+#line 1294 "lex.yy.cc"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1337,10 +1322,10 @@
 				if ( yy_current_state >= 337 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
-			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 540 );
+		while ( yy_base[yy_current_state] != 542 );
 
 yy_find_action:
 /* %% [10.0] code to find the action number goes here */
@@ -2132,7 +2117,7 @@
 #line 445 "camp.l"
 ECHO;
 	YY_BREAK
-#line 2136 "lex.yy.cc"
+#line 2121 "lex.yy.cc"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2348,7 +2333,7 @@
 
 			if ( b->yy_is_our_buffer )
 				{
-				yy_size_t new_size = b->yy_buf_size * 2;
+				int new_size = b->yy_buf_size * 2;
 
 				if ( new_size <= 0 )
 					b->yy_buf_size += b->yy_buf_size / 8;
@@ -2357,11 +2342,11 @@
 
 				b->yy_ch_buf = (char *)
 					/* Include room in for 2 EOB chars. */
-					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
+					yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2)  );
 				}
 			else
 				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
+				b->yy_ch_buf = NULL;
 
 			if ( ! b->yy_ch_buf )
 				YY_FATAL_ERROR(
@@ -2403,10 +2388,10 @@
 	else
 		ret_val = EOB_ACT_CONTINUE_SCAN;
 
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+	if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
 		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size  );
 		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
 			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
 	}
@@ -2451,7 +2436,7 @@
 			if ( yy_current_state >= 337 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
-		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 		}
 
 	return yy_current_state;
@@ -2484,7 +2469,7 @@
 		if ( yy_current_state >= 337 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
-	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
 	yy_is_jam = (yy_current_state == 336);
 
 		return yy_is_jam ? 0 : yy_current_state;
@@ -2508,7 +2493,7 @@
 	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 		{ /* need to shift things up to make room */
 		/* +2 for EOB chars. */
-		yy_size_t number_to_move = (yy_n_chars) + 2;
+		int number_to_move = (yy_n_chars) + 2;
 		char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
 					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
 		char *source =
@@ -2520,7 +2505,7 @@
 		yy_cp += (int) (dest - source);
 		yy_bp += (int) (dest - source);
 		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+			(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
 
 		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
@@ -2567,7 +2552,7 @@
 
 		else
 			{ /* need more input */
-			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+			int offset = (yy_c_buf_p) - (yytext_ptr);
 			++(yy_c_buf_p);
 
 			switch ( yy_get_next_buffer(  ) )
@@ -2591,7 +2576,7 @@
 				case EOB_ACT_END_OF_FILE:
 					{
 					if ( yywrap( ) )
-						return EOF;
+						return 0;
 
 					if ( ! (yy_did_buffer_switch_on_eof) )
 						YY_NEW_FILE;
@@ -2719,12 +2704,12 @@
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
-	b->yy_buf_size = (yy_size_t)size;
+	b->yy_buf_size = size;
 
 	/* yy_ch_buf has to be 2 characters longer than the size given because
 	 * we need to put in 2 end-of-buffer characters.
 	 */
-	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+	b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2)  );
 	if ( ! b->yy_ch_buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
@@ -2907,7 +2892,7 @@
 /* %if-c++-only */
 /* %endif */
 {
-	yy_size_t num_to_alloc;
+	int num_to_alloc;
     
 	if (!(yy_buffer_stack)) {
 
@@ -2964,16 +2949,16 @@
 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 		/* They forgot to leave room for the EOB's. */
-		return 0;
+		return NULL;
 
 	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
 	b->yy_buf_pos = b->yy_ch_buf = base;
 	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
+	b->yy_input_file = NULL;
 	b->yy_n_chars = b->yy_buf_size;
 	b->yy_is_interactive = 0;
 	b->yy_at_bol = 1;
@@ -2998,7 +2983,7 @@
 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 {
     
-	return yy_scan_bytes(yystr,strlen(yystr) );
+	return yy_scan_bytes(yystr,(int) strlen(yystr) );
 }
 /* %endif */
 
@@ -3010,7 +2995,7 @@
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 {
 	YY_BUFFER_STATE b;
 	char *buf;
@@ -3018,7 +3003,7 @@
 	yy_size_t i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
+	n = (yy_size_t) _yybytes_len + 2;
 	buf = (char *) yyalloc(n  );
 	if ( ! buf )
 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
@@ -3046,7 +3031,7 @@
 #endif
 
 /* %if-c-only */
-static void yy_fatal_error (yyconst char* msg )
+static void yynoreturn yy_fatal_error (yyconst char* msg )
 {
 			(void) fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
@@ -3106,7 +3091,7 @@
 /** Get the length of the current token.
  * 
  */
-yy_size_t yyget_leng  (void)
+int yyget_leng  (void)
 {
         return yyleng;
 }
@@ -3173,10 +3158,10 @@
      * This function is called from yylex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = 0;
+    (yy_buffer_stack) = NULL;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
+    (yy_c_buf_p) = NULL;
     (yy_init) = 0;
     (yy_start) = 0;
 
@@ -3185,8 +3170,8 @@
     yyin = stdin;
     yyout = stdout;
 #else
-    yyin = (FILE *) 0;
-    yyout = (FILE *) 0;
+    yyin = NULL;
+    yyout = NULL;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
@@ -3249,7 +3234,7 @@
 
 void *yyalloc (yy_size_t  size )
 {
-			return (void *) malloc( size );
+			return malloc(size);
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
@@ -3262,7 +3247,7 @@
 	 * any pointer type to void*, and deal with argument conversions
 	 * as though doing an assignment.
 	 */
-	return (void *) realloc( (char *) ptr, size );
+	return realloc(ptr, size);
 }
 
 void yyfree (void * ptr )

Deleted: trunk/Build/source/utils/asymptote/libatomic_ops-7.4.4.tar.gz
===================================================================
(Binary files differ)

Added: trunk/Build/source/utils/asymptote/libatomic_ops-7.6.2.tar.gz
===================================================================
(Binary files differ)

Index: trunk/Build/source/utils/asymptote/libatomic_ops-7.6.2.tar.gz
===================================================================
--- trunk/Build/source/utils/asymptote/libatomic_ops-7.6.2.tar.gz	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/libatomic_ops-7.6.2.tar.gz	2018-04-03 22:35:04 UTC (rev 47274)

Property changes on: trunk/Build/source/utils/asymptote/libatomic_ops-7.6.2.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/main.cc
===================================================================
--- trunk/Build/source/utils/asymptote/main.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/main.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -19,6 +19,8 @@
 *
 *************/
 
+#define _POSIX_C_SOURCE 200809L
+
 #include <iostream>
 #include <cstdlib>
 #include <cerrno>

Modified: trunk/Build/source/utils/asymptote/mathop.h
===================================================================
--- trunk/Build/source/utils/asymptote/mathop.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/mathop.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -238,21 +238,23 @@
   }
 };
  
-template <typename T>
+template <typename>
 struct mod {
-  T operator() (T x, T y,  size_t i=0) {
+  Int operator() (Int x, Int y,  size_t i=0) {
     if(y == 0) dividebyzero(i);
     return portableMod(x,y);
   }
 };
 
-template <typename T>
+template <typename>
 struct quotient {
-  T operator() (T x, T y,  size_t i=0) {
+  Int operator() (Int x, Int y,  size_t i=0) {
     if(y == 0) dividebyzero(i);
     if(y == -1) return Negate(x);
 // Implementation-independent definition of integer division: round down
-    return (x-portableMod(x,y))/y;
+    Int q=x/y;
+    if(q >= 0 || y*q == x) return q;
+    return q-1;
   }
 };
 

Modified: trunk/Build/source/utils/asymptote/patches/README
===================================================================
--- trunk/Build/source/utils/asymptote/patches/README	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/patches/README	2018-04-03 22:35:04 UTC (rev 47274)
@@ -16,6 +16,11 @@
 
 The file cygwin_glu.patch adds missing GLU 1.3 declarations to w32api/GL/glu.h.
 
+The file cygwin_gc.patch fixes redefined symbols in the Boehm garbage collector.
+
+The file cygwin_freeglut-2.8.1.patch fixes undefined symbols when compiling the
+freeglut library under cygwin.
+
 The file fixmem.reg patches the Microsoft Windows registry so that the
 cygwin1.dll library can allocate more than 384MB. It is applied
 automatically by the Asymptote setup.exe file but may also be applied manually:

Added: trunk/Build/source/utils/asymptote/patches/cygwin_freeglut-2.8.1.patch
===================================================================
--- trunk/Build/source/utils/asymptote/patches/cygwin_freeglut-2.8.1.patch	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/patches/cygwin_freeglut-2.8.1.patch	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,13 @@
+diff -r -u freeglut-2.8.1/src/freeglut_internal.h freeglut-2.8.1J/src/freeglut_internal.h
+--- freeglut-2.8.1/src/freeglut_internal.h	2012-11-19 06:14:16.000000000 -0700
++++ freeglut-2.8.1J/src/freeglut_internal.h	2018-01-05 11:38:25.214161500 -0700
+@@ -32,6 +32,9 @@
+ #    include "config.h"
+ #endif
+ 
++#define GCL_HCURSOR (-12)
++#define _snprintf snprintf
++
+ /* XXX Update these for each release! */
+ #define  VERSION_MAJOR 2
+ #define  VERSION_MINOR 8


Property changes on: trunk/Build/source/utils/asymptote/patches/cygwin_freeglut-2.8.1.patch
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/patches/cygwin_gc.patch
===================================================================
--- trunk/Build/source/utils/asymptote/patches/cygwin_gc.patch	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/patches/cygwin_gc.patch	2018-04-03 22:35:04 UTC (rev 47274)
@@ -0,0 +1,77 @@
+diff -ru gc-7.6.2.orig/include/config.h.in gc-7.6.2/include/config.h.in
+--- gc-7.6.2.orig/include/config.h.in	2017-12-23 00:48:37.000000000 -0800
++++ gc-7.6.2/include/config.h.in	2018-01-12 13:42:30.026704300 -0800
+@@ -100,19 +100,27 @@
+ #undef GC_USE_DLOPEN_WRAP
+ 
+ /* The major version number of this GC release. */
++#ifndef GC_VERSION_MAJOR
+ #undef GC_VERSION_MAJOR
++#endif
+ 
+ /* The micro version number of this GC release. */
++#ifndef GC_VERSION_MICRO
+ #undef GC_VERSION_MICRO
++#endif
+ 
+ /* The minor version number of this GC release. */
++#ifndef GC_VERSION_MINOR
+ #undef GC_VERSION_MINOR
++#endif
+ 
+ /* Define to support pthreads-win32 or winpthreads. */
+ #undef GC_WIN32_PTHREADS
+ 
+ /* Define to support Win32 threads. */
++#ifndef GC_WIN32_THREADS
+ #undef GC_WIN32_THREADS
++#endif
+ 
+ /* Define to install pthread_atfork() handlers by default. */
+ #undef HANDLE_FORK
+@@ -196,22 +204,32 @@
+ #undef PACKAGE
+ 
+ /* Define to the address where bug reports for this package should be sent. */
++#ifndef PACKAGE_BUGREPORT
+ #undef PACKAGE_BUGREPORT
++#endif
+ 
+ /* Define to the full name of this package. */
++#ifndef PACKAGE_NAME
+ #undef PACKAGE_NAME
++#endif
+ 
+ /* Define to the full name and version of this package. */
++#ifndef PACKAGE_STRING
+ #undef PACKAGE_STRING
++#endif
+ 
+ /* Define to the one symbol short name of this package. */
++#ifndef PACKAGE_TARNAME
+ #undef PACKAGE_TARNAME
++#endif
+ 
+ /* Define to the home page for this package. */
+ #undef PACKAGE_URL
+ 
+ /* Define to the version of this package. */
++#ifndef PACKAGE_VERSION
+ #undef PACKAGE_VERSION
++#endif
+ 
+ /* Define to enable parallel marking. */
+ #undef PARALLEL_MARK
+diff -ru gc-7.6.2.orig/include/gc_config_macros.h gc-7.6.2/include/gc_config_macros.h
+--- gc-7.6.2.orig/include/gc_config_macros.h	2017-12-23 00:46:29.000000000 -0800
++++ gc-7.6.2/include/gc_config_macros.h	2018-01-12 13:44:29.838482500 -0800
+@@ -48,7 +48,9 @@
+ # define GC_LINUX_THREADS
+ #endif
+ #if defined(WIN32_THREADS)
++# ifndef GC_WIN32_THREADS
+ # define GC_WIN32_THREADS
++# endif
+ #endif
+ #if defined(RTEMS_THREADS)
+ # define GC_RTEMS_PTHREADS


Property changes on: trunk/Build/source/utils/asymptote/patches/cygwin_gc.patch
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/predicates.cc
===================================================================
--- trunk/Build/source/utils/asymptote/predicates.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/predicates.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -663,8 +663,8 @@
 /*                                                                           */
 /*****************************************************************************/
 
-static int fast_expansion_sum_zeroelim(int elen, REAL *e, 
-				       int flen, REAL *f, REAL *h)
+static int fast_expansion_sum_zeroelim(int elen, const REAL *e, 
+				       int flen, const REAL *f, REAL *h)
      /* h cannot be e or f. */
 {
   REAL Q;
@@ -749,7 +749,7 @@
 /*                                                                           */
 /*****************************************************************************/
 
-static int scale_expansion_zeroelim(int elen, REAL *e, REAL b, REAL *h)
+static int scale_expansion_zeroelim(int elen, const REAL *e, REAL b, REAL *h)
      /* e and h cannot be the same. */
 {
   INEXACT REAL Q, sum;
@@ -797,7 +797,7 @@
 /*                                                                           */
 /*****************************************************************************/
 
-static REAL estimate(int elen, REAL *e)
+static REAL estimate(int elen, const REAL *e)
 {
   REAL Q;
   int eindex;
@@ -835,7 +835,7 @@
 /*                                                                           */
 /*****************************************************************************/
 
-REAL orient2dadapt(REAL *pa, REAL *pb, REAL *pc, REAL detsum)
+REAL orient2dadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL detsum)
 {
   INEXACT REAL acx, acy, bcx, bcy;
   REAL acxtail, acytail, bcxtail, bcytail;
@@ -915,7 +915,7 @@
   return(D[Dlength - 1]);
 }
 
-REAL orient2d(REAL *pa, REAL *pb, REAL *pc)
+REAL orient2d(const REAL *pa, const REAL *pb, const REAL *pc)
 {
   REAL detleft, detright, det;
   REAL detsum, errbound;
@@ -957,7 +957,8 @@
   return orient;
 }
 
-REAL orient2d(REAL ax, REAL ay, REAL bx, REAL by, REAL cx, REAL cy)
+REAL orient2d(const REAL ax, const REAL ay, const REAL bx, const REAL by,
+              const REAL cx, const REAL cy)
 {
   REAL detleft, detright, det;
   REAL detsum, errbound;
@@ -1032,7 +1033,7 @@
 /*                                                                           */
 /*****************************************************************************/
 
-static REAL orient3dadapt(REAL *pa, REAL *pb, REAL *pc, REAL *pd, 
+static REAL orient3dadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, 
 			  REAL permanent)
 {
   INEXACT REAL adx, bdx, cdx, ady, bdy, cdy, adz, bdz, cdz;
@@ -1433,7 +1434,7 @@
   return finnow[finlength - 1];
 }
 
-REAL orient3d(REAL *pa, REAL *pb, REAL *pc, REAL *pd)
+REAL orient3d(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
 {
   REAL adx, bdx, cdx, ady, bdy, cdy, adz, bdz, cdz;
   REAL bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
@@ -1506,7 +1507,7 @@
 /*                                                                           */
 /*****************************************************************************/
 
-static REAL incircleadapt(REAL *pa, REAL *pb, REAL *pc, REAL *pd, 
+static REAL incircleadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, 
 			  REAL permanent)
 {
   INEXACT REAL adx, bdx, cdx, ady, bdy, cdy;
@@ -2078,7 +2079,7 @@
   return finnow[finlength - 1];
 }
 
-REAL incircle(REAL *pa, REAL *pb, REAL *pc, REAL *pd)
+REAL incircle(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd)
 {
   REAL adx, bdx, cdx, ady, bdy, cdy;
   REAL bdxcdy, cdxbdy, cdxady, adxcdy, adxbdy, bdxady;
@@ -2207,7 +2208,7 @@
 /*                                                                           */
 /*****************************************************************************/
 
-static REAL insphereexact(REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
+static REAL insphereexact(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe)
 {
   INEXACT REAL axby1, bxcy1, cxdy1, dxey1, exay1;
   INEXACT REAL bxay1, cxby1, dxcy1, exdy1, axey1;
@@ -2459,7 +2460,7 @@
   return deter[deterlen - 1];
 }
 
-static REAL insphereadapt(REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe, 
+static REAL insphereadapt(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe, 
 			  REAL permanent)
 {
   INEXACT REAL aex, bex, cex, dex, aey, bey, cey, dey, aez, bez, cez, dez;
@@ -2674,7 +2675,7 @@
   return insphereexact(pa, pb, pc, pd, pe);
 }
 
-REAL insphere(REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
+REAL insphere(const REAL *pa, const REAL *pb, const REAL *pc, const REAL *pd, const REAL *pe)
 {
   REAL aex, bex, cex, dex;
   REAL aey, bey, cey, dey;

Modified: trunk/Build/source/utils/asymptote/predicates.h
===================================================================
--- trunk/Build/source/utils/asymptote/predicates.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/predicates.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1,15 +1,19 @@
 #ifndef PREDICATES_H
 #define PREDICATES_H
 
-double orient2d(double* pa, double* pb, double* pc);
+double orient2d(const double* pa, const double* pb, const double* pc);
 double orient2d(double ax, double ay, double bx, double by, double cx,
                 double cy);
-double orient2dadapt(double *pa, double *pb, double *pc, double detsum);
-double orient3d(double* pa, double* pb, double* pc, double* pd);
-double incircle(double* pa, double* pb, double* pc, double* pd);
+double orient2dadapt(const double *pa, const double *pb, const double *pc,
+                     double detsum);
+double orient3d(const double *pa, const double *pb, const double *pc,
+                const double *pd);
+double incircle(const double *pa, const double *pb, const double *pc,
+                const double *pd);
 double incircle(double ax, double ay, double bx, double by, double cx,
                 double cy, double dx, double dy);
-double insphere(double* pa, double* pb, double* pc, double* pd, double* pe);
+double insphere(const double *pa, const double *pb, const double *pc,
+                const double *pd, const double *pe);
 
 extern const double resulterrbound,ccwerrboundA,ccwerrboundB,ccwerrboundC,
   o3derrboundA,o3derrboundB,o3derrboundC,iccerrboundA,iccerrboundB,

Modified: trunk/Build/source/utils/asymptote/revision.cc
===================================================================
--- trunk/Build/source/utils/asymptote/revision.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/revision.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1 +1 @@
-const char *REVISION="2.41";
+const char *REVISION="2.42";

Modified: trunk/Build/source/utils/asymptote/runarray.cc
===================================================================
--- trunk/Build/source/utils/asymptote/runarray.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runarray.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1322,7 +1322,7 @@
   {Stack->push<array*>(c); return;}
 }
 
-// In a boolean array, find the index of the nth true value or -1 if not found
+// Find the index of the nth true value in a boolean array or -1 if not found.
 // If n is negative, search backwards.
 #line 1107 "runarray.in"
 // Int find(boolarray *a, Int n=1);
@@ -1346,15 +1346,32 @@
   {Stack->push<Int>(j); return;}
 }
 
+// Find all indices of true values in a boolean array. 
+#line 1125 "runarray.in"
+// Intarray* findall(boolarray *a);
+void gen_runarray45(stack *Stack)
+{
+  boolarray * a=vm::pop<boolarray *>(Stack);
+#line 1126 "runarray.in"
+  size_t size=checkArray(a);
+  array *b=new array(0);
+  for(size_t i=0; i < size; i++) {
+    if(read<bool>(a,i)) {
+      b->push((Int) i);
+    }
+  }
+  {Stack->push<Intarray*>(b); return;}
+}
+
 // construct vector obtained by replacing those elements of b for which the
 // corresponding elements of a are false by the corresponding element of c.
-#line 1126 "runarray.in"
+#line 1139 "runarray.in"
 void arrayConditional(stack *Stack)
 {
   array * c=vm::pop<array *>(Stack);
   array * b=vm::pop<array *>(Stack);
   array * a=vm::pop<array *>(Stack);
-#line 1127 "runarray.in"
+#line 1140 "runarray.in"
   size_t size=checkArray(a);
   array *r=new array(size);
   if(b && c) {
@@ -1378,22 +1395,22 @@
 }
 
 // Return an n x n identity matrix.
-#line 1151 "runarray.in"
+#line 1164 "runarray.in"
 // realarray2* identity(Int n);
-void gen_runarray46(stack *Stack)
+void gen_runarray47(stack *Stack)
 {
   Int n=vm::pop<Int>(Stack);
-#line 1152 "runarray.in"
+#line 1165 "runarray.in"
   {Stack->push<realarray2*>(Identity(n)); return;}
 }
 
 // Return the inverse of an n x n matrix a using Gauss-Jordan elimination.
-#line 1157 "runarray.in"
+#line 1170 "runarray.in"
 // realarray2* inverse(realarray2 *a);
-void gen_runarray47(stack *Stack)
+void gen_runarray48(stack *Stack)
 {
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1158 "runarray.in"
+#line 1171 "runarray.in"
   size_t n=checkArray(a);
   double *A;
   copyArray2C(A,a,true,0,NoGC);
@@ -1406,14 +1423,14 @@
 // Solve the linear equation ax=b by LU decomposition, returning the
 // solution x, where a is an n x n matrix and b is an array of length n.
 // If no solution exists, return an empty array.
-#line 1171 "runarray.in"
+#line 1184 "runarray.in"
 // realarray* solve(realarray2 *a, realarray *b, bool warn=true);
-void gen_runarray48(stack *Stack)
+void gen_runarray49(stack *Stack)
 {
   bool warn=vm::pop<bool>(Stack,true);
   realarray * b=vm::pop<realarray *>(Stack);
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1172 "runarray.in"
+#line 1185 "runarray.in"
   size_t n=checkArray(a);
   
   if(n == 0) {Stack->push<realarray*>(new array(0)); return;}
@@ -1465,14 +1482,14 @@
 // Solve the linear equation ax=b by LU decomposition, returning the
 // solution x, where a is an n x n matrix and b is an n x m matrix.
 // If no solution exists, return an empty array.
-#line 1224 "runarray.in"
+#line 1237 "runarray.in"
 // realarray2* solve(realarray2 *a, realarray2 *b, bool warn=true);
-void gen_runarray49(stack *Stack)
+void gen_runarray50(stack *Stack)
 {
   bool warn=vm::pop<bool>(Stack,true);
   realarray2 * b=vm::pop<realarray2 *>(Stack);
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1225 "runarray.in"
+#line 1238 "runarray.in"
   size_t n=checkArray(a);
   
   if(n == 0) {Stack->push<realarray2*>(new array(0)); return;}
@@ -1534,12 +1551,12 @@
 }
 
 // Compute the determinant of an n x n matrix.
-#line 1287 "runarray.in"
+#line 1300 "runarray.in"
 // real determinant(realarray2 *a);
-void gen_runarray50(stack *Stack)
+void gen_runarray51(stack *Stack)
 {
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1288 "runarray.in"
+#line 1301 "runarray.in"
   real *A;
   copyArray2C(A,a);
   size_t n=checkArray(a);
@@ -1554,13 +1571,13 @@
   {Stack->push<real>(det); return;}
 }
 
-#line 1303 "runarray.in"
+#line 1316 "runarray.in"
 // realarray* *(realarray2 *a, realarray *b);
-void gen_runarray51(stack *Stack)
+void gen_runarray52(stack *Stack)
 {
   realarray * b=vm::pop<realarray *>(Stack);
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1304 "runarray.in"
+#line 1317 "runarray.in"
   size_t n=checkArray(a);
   size_t m=checkArray(b);
   array *c=new array(n);
@@ -1578,13 +1595,13 @@
   {Stack->push<realarray*>(c); return;}
 }
 
-#line 1322 "runarray.in"
+#line 1335 "runarray.in"
 // realarray* *(realarray *a, realarray2 *b);
-void gen_runarray52(stack *Stack)
+void gen_runarray53(stack *Stack)
 {
   realarray2 * b=vm::pop<realarray2 *>(Stack);
   realarray * a=vm::pop<realarray *>(Stack);
-#line 1323 "runarray.in"
+#line 1336 "runarray.in"
   size_t n=checkArray(a);
   if(n != checkArray(b)) error(incommensurate);
   real *A;
@@ -1612,62 +1629,62 @@
   {Stack->push<realarray*>(c); return;}
 }
 
-#line 1351 "runarray.in"
+#line 1364 "runarray.in"
 // Intarray2* *(Intarray2 *a, Intarray2 *b);
-void gen_runarray53(stack *Stack)
+void gen_runarray54(stack *Stack)
 {
   Intarray2 * b=vm::pop<Intarray2 *>(Stack);
   Intarray2 * a=vm::pop<Intarray2 *>(Stack);
-#line 1352 "runarray.in"
+#line 1365 "runarray.in"
   {Stack->push<Intarray2*>(mult<Int>(a,b)); return;}
 }
 
-#line 1356 "runarray.in"
+#line 1369 "runarray.in"
 // realarray2* *(realarray2 *a, realarray2 *b);
-void gen_runarray54(stack *Stack)
+void gen_runarray55(stack *Stack)
 {
   realarray2 * b=vm::pop<realarray2 *>(Stack);
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1357 "runarray.in"
+#line 1370 "runarray.in"
   {Stack->push<realarray2*>(mult<real>(a,b)); return;}
 }
 
-#line 1361 "runarray.in"
+#line 1374 "runarray.in"
 // pairarray2* *(pairarray2 *a, pairarray2 *b);
-void gen_runarray55(stack *Stack)
+void gen_runarray56(stack *Stack)
 {
   pairarray2 * b=vm::pop<pairarray2 *>(Stack);
   pairarray2 * a=vm::pop<pairarray2 *>(Stack);
-#line 1362 "runarray.in"
+#line 1375 "runarray.in"
   {Stack->push<pairarray2*>(mult<pair>(a,b)); return;}
 }
 
-#line 1366 "runarray.in"
+#line 1379 "runarray.in"
 // triple *(realarray2 *t, triple v);
-void gen_runarray56(stack *Stack)
+void gen_runarray57(stack *Stack)
 {
   triple v=vm::pop<triple>(Stack);
   realarray2 * t=vm::pop<realarray2 *>(Stack);
-#line 1367 "runarray.in"
+#line 1380 "runarray.in"
   {Stack->push<triple>(*t*v); return;}
 }
 
-#line 1371 "runarray.in"
+#line 1384 "runarray.in"
 // realarray2* AtA(realarray2 *a);
-void gen_runarray57(stack *Stack)
+void gen_runarray58(stack *Stack)
 {
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1372 "runarray.in"
+#line 1385 "runarray.in"
   {Stack->push<realarray2*>(AtA<real>(a)); return;}
 }
 
-#line 1376 "runarray.in"
+#line 1389 "runarray.in"
 // pair project(triple v, realarray2 *t);
-void gen_runarray58(stack *Stack)
+void gen_runarray59(stack *Stack)
 {
   realarray2 * t=vm::pop<realarray2 *>(Stack);
   triple v=vm::pop<triple>(Stack);
-#line 1377 "runarray.in"
+#line 1390 "runarray.in"
   size_t n=checkArray(t);
   if(n != 4) error(incommensurate);
   array *t0=read<array*>(t,0);
@@ -1692,13 +1709,13 @@
 }
 
 // Compute the dot product of vectors a and b.
-#line 1402 "runarray.in"
+#line 1415 "runarray.in"
 // real dot(realarray *a, realarray *b);
-void gen_runarray59(stack *Stack)
+void gen_runarray60(stack *Stack)
 {
   realarray * b=vm::pop<realarray *>(Stack);
   realarray * a=vm::pop<realarray *>(Stack);
-#line 1403 "runarray.in"
+#line 1416 "runarray.in"
   size_t n=checkArrays(a,b);
   real sum=0.0;
   for(size_t i=0; i < n; ++i)
@@ -1707,13 +1724,13 @@
 }
 
 // Compute the complex dot product of vectors a and b.
-#line 1412 "runarray.in"
+#line 1425 "runarray.in"
 // pair dot(pairarray *a, pairarray *b);
-void gen_runarray60(stack *Stack)
+void gen_runarray61(stack *Stack)
 {
   pairarray * b=vm::pop<pairarray *>(Stack);
   pairarray * a=vm::pop<pairarray *>(Stack);
-#line 1413 "runarray.in"
+#line 1426 "runarray.in"
   size_t n=checkArrays(a,b);
   pair sum=zero;
   for(size_t i=0; i < n; ++i)
@@ -1728,15 +1745,15 @@
 // [      a[2] b[2] c[2]        ]
 // [                ...         ]
 // [ c[n-1]       a[n-1] b[n-1] ]
-#line 1428 "runarray.in"
+#line 1441 "runarray.in"
 // realarray* tridiagonal(realarray *a, realarray *b, realarray *c, realarray *f);
-void gen_runarray61(stack *Stack)
+void gen_runarray62(stack *Stack)
 {
   realarray * f=vm::pop<realarray *>(Stack);
   realarray * c=vm::pop<realarray *>(Stack);
   realarray * b=vm::pop<realarray *>(Stack);
   realarray * a=vm::pop<realarray *>(Stack);
-#line 1429 "runarray.in"
+#line 1442 "runarray.in"
   size_t n=checkArrays(a,b);
   checkEqual(n,checkArray(c));
   checkEqual(n,checkArray(f));
@@ -1833,9 +1850,9 @@
 }
 
 // Root solve by Newton-Raphson
-#line 1526 "runarray.in"
+#line 1539 "runarray.in"
 // real newton(Int iterations=100, callableReal *f, callableReal *fprime, real x,            bool verbose=false);
-void gen_runarray62(stack *Stack)
+void gen_runarray63(stack *Stack)
 {
   bool verbose=vm::pop<bool>(Stack,false);
   real x=vm::pop<real>(Stack);
@@ -1842,7 +1859,7 @@
   callableReal * fprime=vm::pop<callableReal *>(Stack);
   callableReal * f=vm::pop<callableReal *>(Stack);
   Int iterations=vm::pop<Int>(Stack,100);
-#line 1528 "runarray.in"
+#line 1541 "runarray.in"
   static const real fuzz=1000.0*DBL_EPSILON;
   Int i=0;
   size_t oldPrec=0;
@@ -1888,9 +1905,9 @@
 
 // Root solve by Newton-Raphson bisection
 // cf. routine rtsafe (Press et al.,  Numerical Recipes, 1991).
-#line 1574 "runarray.in"
+#line 1587 "runarray.in"
 // real newton(Int iterations=100, callableReal *f, callableReal *fprime, real x1,            real x2, bool verbose=false);
-void gen_runarray63(stack *Stack)
+void gen_runarray64(stack *Stack)
 {
   bool verbose=vm::pop<bool>(Stack,false);
   real x2=vm::pop<real>(Stack);
@@ -1898,7 +1915,7 @@
   callableReal * fprime=vm::pop<callableReal *>(Stack);
   callableReal * f=vm::pop<callableReal *>(Stack);
   Int iterations=vm::pop<Int>(Stack,100);
-#line 1576 "runarray.in"
+#line 1589 "runarray.in"
   static const real fuzz=1000.0*DBL_EPSILON;
   size_t oldPrec=0;
   if(verbose) 
@@ -1984,9 +2001,9 @@
 // In this implementation, the binary search is interleaved
 // with a modified version of quadratic interpolation.
 // This is a C++ port of the Asymptote routine written by Charles Staats III.
-#line 1662 "runarray.in"
+#line 1675 "runarray.in"
 // real _findroot(callableReal *f, real a, real b, real tolerance,               real fa, real fb);
-void gen_runarray64(stack *Stack)
+void gen_runarray65(stack *Stack)
 {
   real fb=vm::pop<real>(Stack);
   real fa=vm::pop<real>(Stack);
@@ -1994,7 +2011,7 @@
   real b=vm::pop<real>(Stack);
   real a=vm::pop<real>(Stack);
   callableReal * f=vm::pop<callableReal *>(Stack);
-#line 1664 "runarray.in"
+#line 1677 "runarray.in"
   if(fa == 0.0) {Stack->push<real>(a); return;}
   if(fb == 0.0) {Stack->push<real>(b); return;}
   
@@ -2086,9 +2103,9 @@
   {Stack->push<real>(a-(b-a)/(fb-fa)*fa); return;}
 }
 
-#line 1756 "runarray.in"
+#line 1769 "runarray.in"
 // real simpson(callableReal *f, real a, real b, real acc=DBL_EPSILON,             real dxmax=0);
-void gen_runarray65(stack *Stack)
+void gen_runarray66(stack *Stack)
 {
   real dxmax=vm::pop<real>(Stack,0);
   real acc=vm::pop<real>(Stack,DBL_EPSILON);
@@ -2095,7 +2112,7 @@
   real b=vm::pop<real>(Stack);
   real a=vm::pop<real>(Stack);
   callableReal * f=vm::pop<callableReal *>(Stack);
-#line 1758 "runarray.in"
+#line 1771 "runarray.in"
   real integral;
   if(dxmax <= 0) dxmax=fabs(b-a);
   callable *oldFunc=Func;
@@ -2108,13 +2125,13 @@
 }
 
 // Compute the fast Fourier transform of a pair array
-#line 1771 "runarray.in"
+#line 1784 "runarray.in"
 // pairarray* fft(pairarray *a, Int sign=1);
-void gen_runarray66(stack *Stack)
+void gen_runarray67(stack *Stack)
 {
   Int sign=vm::pop<Int>(Stack,1);
   pairarray * a=vm::pop<pairarray *>(Stack);
-#line 1772 "runarray.in"
+#line 1785 "runarray.in"
 #ifdef HAVE_LIBFFTW3
   unsigned n=(unsigned) checkArray(a);
   array *c=new array(n);
@@ -2143,12 +2160,12 @@
   {Stack->push<pairarray*>(c); return;}
 }
 
-#line 1801 "runarray.in"
+#line 1814 "runarray.in"
 // Intarray2* triangulate(pairarray *z);
-void gen_runarray67(stack *Stack)
+void gen_runarray68(stack *Stack)
 {
   pairarray * z=vm::pop<pairarray *>(Stack);
-#line 1802 "runarray.in"
+#line 1815 "runarray.in"
   size_t nv=checkArray(z);
 // Call robust version of Gilles Dumoulin's port of Paul Bourke's
 // triangulation code.
@@ -2182,12 +2199,12 @@
   {Stack->push<Intarray2*>(t); return;}
 }
 
-#line 1836 "runarray.in"
+#line 1849 "runarray.in"
 // real norm(realarray *a);
-void gen_runarray68(stack *Stack)
+void gen_runarray69(stack *Stack)
 {
   realarray * a=vm::pop<realarray *>(Stack);
-#line 1837 "runarray.in"
+#line 1850 "runarray.in"
   size_t n=checkArray(a);
   real M=0.0;
   for(size_t i=0; i < n; ++i) {
@@ -2197,12 +2214,12 @@
   {Stack->push<real>(M); return;}
 }
 
-#line 1847 "runarray.in"
+#line 1860 "runarray.in"
 // real norm(realarray2 *a);
-void gen_runarray69(stack *Stack)
+void gen_runarray70(stack *Stack)
 {
   realarray2 * a=vm::pop<realarray2 *>(Stack);
-#line 1848 "runarray.in"
+#line 1861 "runarray.in"
   size_t n=checkArray(a);
   real M=0.0;
   for(size_t i=0; i < n; ++i) {
@@ -2216,12 +2233,12 @@
   {Stack->push<real>(M); return;}
 }
 
-#line 1862 "runarray.in"
+#line 1875 "runarray.in"
 // real norm(triplearray2 *a);
-void gen_runarray70(stack *Stack)
+void gen_runarray71(stack *Stack)
 {
   triplearray2 * a=vm::pop<triplearray2 *>(Stack);
-#line 1863 "runarray.in"
+#line 1876 "runarray.in"
   size_t n=checkArray(a);
   real M=0.0;
   for(size_t i=0; i < n; ++i) {
@@ -2235,12 +2252,12 @@
   {Stack->push<real>(sqrt(M)); return;}
 }
 
-#line 1877 "runarray.in"
+#line 1890 "runarray.in"
 // real change2(triplearray2 *a);
-void gen_runarray71(stack *Stack)
+void gen_runarray72(stack *Stack)
 {
   triplearray2 * a=vm::pop<triplearray2 *>(Stack);
-#line 1878 "runarray.in"
+#line 1891 "runarray.in"
   size_t n=checkArray(a);
   if(n == 0) {Stack->push<real>(0.0); return;}
   
@@ -2261,13 +2278,13 @@
   {Stack->push<real>(M); return;}
 }
 
-#line 1899 "runarray.in"
+#line 1912 "runarray.in"
 // triple minbezier(triplearray2 *P, triple b);
-void gen_runarray72(stack *Stack)
+void gen_runarray73(stack *Stack)
 {
   triple b=vm::pop<triple>(Stack);
   triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1900 "runarray.in"
+#line 1913 "runarray.in"
   size_t N;
   real *A=copyTripleArray2Components(P,N);
   bound_double *B=bounddouble(N);
@@ -2278,13 +2295,13 @@
   {Stack->push<triple>(b); return;}
 }
 
-#line 1911 "runarray.in"
+#line 1924 "runarray.in"
 // triple maxbezier(triplearray2 *P, triple b);
-void gen_runarray73(stack *Stack)
+void gen_runarray74(stack *Stack)
 {
   triple b=vm::pop<triple>(Stack);
   triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1912 "runarray.in"
+#line 1925 "runarray.in"
   size_t N;
   real *A=copyTripleArray2Components(P,N);
   bound_double *B=bounddouble(N);
@@ -2295,13 +2312,13 @@
   {Stack->push<triple>(b); return;}
 }
 
-#line 1923 "runarray.in"
+#line 1936 "runarray.in"
 // pair minratio(triplearray2 *P, pair b);
-void gen_runarray74(stack *Stack)
+void gen_runarray75(stack *Stack)
 {
   pair b=vm::pop<pair>(Stack);
   triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1924 "runarray.in"
+#line 1937 "runarray.in"
   size_t N;
   triple *A=copyTripleArray2C(P,N);
   real fuzz=sqrtFuzz*norm(A,N);
@@ -2312,13 +2329,13 @@
   {Stack->push<pair>(b); return;}
 }
 
-#line 1935 "runarray.in"
+#line 1948 "runarray.in"
 // pair maxratio(triplearray2 *P, pair b);
-void gen_runarray75(stack *Stack)
+void gen_runarray76(stack *Stack)
 {
   pair b=vm::pop<pair>(Stack);
   triplearray2 * P=vm::pop<triplearray2 *>(Stack);
-#line 1936 "runarray.in"
+#line 1949 "runarray.in"
   size_t N;
   triple *A=copyTripleArray2C(P,N);
   bound_triple *B=boundtriple(N);
@@ -2329,11 +2346,11 @@
   {Stack->push<pair>(b); return;}
 }
 
-#line 1947 "runarray.in"
+#line 1960 "runarray.in"
 // realarray* _projection();
-void gen_runarray76(stack *Stack)
+void gen_runarray77(stack *Stack)
 {
-#line 1948 "runarray.in"
+#line 1961 "runarray.in"
 #ifdef HAVE_GL
   array *a=new array(14);
   gl::projection P=gl::camera();
@@ -2461,69 +2478,71 @@
 #line 1105 "runarray.in"
   addFunc(ve, run::gen_runarray44, primInt(), SYM(find), formal(booleanArray(), SYM(a), false, false), formal(primInt(), SYM(n), true, false));
 #line 1124 "runarray.in"
+  addFunc(ve, run::gen_runarray45, IntArray(), SYM(findall), formal(booleanArray(), SYM(a), false, false));
+#line 1137 "runarray.in"
   REGISTER_BLTIN(run::arrayConditional,"arrayConditional");
-#line 1150 "runarray.in"
-  addFunc(ve, run::gen_runarray46, realArray2(), SYM(identity), formal(primInt(), SYM(n), false, false));
-#line 1156 "runarray.in"
-  addFunc(ve, run::gen_runarray47, realArray2(), SYM(inverse), formal(realArray2(), SYM(a), false, false));
-#line 1168 "runarray.in"
-  addFunc(ve, run::gen_runarray48, realArray(), SYM(solve), formal(realArray2(), SYM(a), false, false), formal(realArray(), SYM(b), false, false), formal(primBoolean(), SYM(warn), true, false));
-#line 1221 "runarray.in"
-  addFunc(ve, run::gen_runarray49, realArray2(), SYM(solve), formal(realArray2(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false), formal(primBoolean(), SYM(warn), true, false));
-#line 1286 "runarray.in"
-  addFunc(ve, run::gen_runarray50, primReal(), SYM(determinant), formal(realArray2(), SYM(a), false, false));
-#line 1303 "runarray.in"
-  addFunc(ve, run::gen_runarray51, realArray(), SYM_TIMES, formal(realArray2(), SYM(a), false, false), formal(realArray(), SYM(b), false, false));
-#line 1322 "runarray.in"
-  addFunc(ve, run::gen_runarray52, realArray(), SYM_TIMES, formal(realArray(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false));
-#line 1351 "runarray.in"
-  addFunc(ve, run::gen_runarray53, IntArray2(), SYM_TIMES, formal(IntArray2(), SYM(a), false, false), formal(IntArray2(), SYM(b), false, false));
-#line 1356 "runarray.in"
-  addFunc(ve, run::gen_runarray54, realArray2(), SYM_TIMES, formal(realArray2(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false));
-#line 1361 "runarray.in"
-  addFunc(ve, run::gen_runarray55, pairArray2(), SYM_TIMES, formal(pairArray2(), SYM(a), false, false), formal(pairArray2(), SYM(b), false, false));
-#line 1366 "runarray.in"
-  addFunc(ve, run::gen_runarray56, primTriple(), SYM_TIMES, formal(realArray2(), SYM(t), false, false), formal(primTriple(), SYM(v), false, false));
-#line 1371 "runarray.in"
-  addFunc(ve, run::gen_runarray57, realArray2(), SYM(AtA), formal(realArray2(), SYM(a), false, false));
-#line 1376 "runarray.in"
-  addFunc(ve, run::gen_runarray58, primPair(), SYM(project), formal(primTriple(), SYM(v), false, false), formal(realArray2(), SYM(t), false, false));
-#line 1401 "runarray.in"
-  addFunc(ve, run::gen_runarray59, primReal(), SYM(dot), formal(realArray(), SYM(a), false, false), formal(realArray(), SYM(b), false, false));
-#line 1411 "runarray.in"
-  addFunc(ve, run::gen_runarray60, primPair(), SYM(dot), formal(pairArray(), SYM(a), false, false), formal(pairArray(), SYM(b), false, false));
-#line 1421 "runarray.in"
-  addFunc(ve, run::gen_runarray61, realArray(), SYM(tridiagonal), formal(realArray(), SYM(a), false, false), formal(realArray(), SYM(b), false, false), formal(realArray(), SYM(c), false, false), formal(realArray(), SYM(f), false, false));
-#line 1525 "runarray.in"
-  addFunc(ve, run::gen_runarray62, primReal(), SYM(newton), formal(primInt(), SYM(iterations), true, false), formal(realRealFunction(), SYM(f), false, false), formal(realRealFunction(), SYM(fprime), false, false), formal(primReal(), SYM(x), false, false), formal(primBoolean(), SYM(verbose), true, false));
-#line 1572 "runarray.in"
-  addFunc(ve, run::gen_runarray63, primReal(), SYM(newton), formal(primInt(), SYM(iterations), true, false), formal(realRealFunction(), SYM(f), false, false), formal(realRealFunction(), SYM(fprime), false, false), formal(primReal(), SYM(x1), false, false), formal(primReal(), SYM(x2), false, false), formal(primBoolean(), SYM(verbose), true, false));
-#line 1654 "runarray.in"
-  addFunc(ve, run::gen_runarray64, primReal(), SYM(_findroot), formal(realRealFunction(), SYM(f), false, false), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(tolerance), false, false), formal(primReal(), SYM(fa), false, false), formal(primReal(), SYM(fb), false, false));
-#line 1756 "runarray.in"
-  addFunc(ve, run::gen_runarray65, primReal(), SYM(simpson), formal(realRealFunction(), SYM(f), false, false), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(acc), true, false), formal(primReal(), SYM(dxmax), true, false));
-#line 1770 "runarray.in"
-  addFunc(ve, run::gen_runarray66, pairArray(), SYM(fft), formal(pairArray(), SYM(a), false, false), formal(primInt(), SYM(sign), true, false));
-#line 1801 "runarray.in"
-  addFunc(ve, run::gen_runarray67, IntArray2(), SYM(triangulate), formal(pairArray(), SYM(z), false, false));
-#line 1836 "runarray.in"
-  addFunc(ve, run::gen_runarray68, primReal(), SYM(norm), formal(realArray(), SYM(a), false, false));
-#line 1847 "runarray.in"
-  addFunc(ve, run::gen_runarray69, primReal(), SYM(norm), formal(realArray2(), SYM(a), false, false));
-#line 1862 "runarray.in"
-  addFunc(ve, run::gen_runarray70, primReal(), SYM(norm), formal(tripleArray2(), SYM(a), false, false));
-#line 1877 "runarray.in"
-  addFunc(ve, run::gen_runarray71, primReal(), SYM(change2), formal(tripleArray2(), SYM(a), false, false));
-#line 1899 "runarray.in"
-  addFunc(ve, run::gen_runarray72, primTriple(), SYM(minbezier), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(b), false, false));
-#line 1911 "runarray.in"
-  addFunc(ve, run::gen_runarray73, primTriple(), SYM(maxbezier), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(b), false, false));
-#line 1923 "runarray.in"
-  addFunc(ve, run::gen_runarray74, primPair(), SYM(minratio), formal(tripleArray2(), SYM(p), false, false), formal(primPair(), SYM(b), false, false));
-#line 1935 "runarray.in"
-  addFunc(ve, run::gen_runarray75, primPair(), SYM(maxratio), formal(tripleArray2(), SYM(p), false, false), formal(primPair(), SYM(b), false, false));
-#line 1947 "runarray.in"
-  addFunc(ve, run::gen_runarray76, realArray(), SYM(_projection));
+#line 1163 "runarray.in"
+  addFunc(ve, run::gen_runarray47, realArray2(), SYM(identity), formal(primInt(), SYM(n), false, false));
+#line 1169 "runarray.in"
+  addFunc(ve, run::gen_runarray48, realArray2(), SYM(inverse), formal(realArray2(), SYM(a), false, false));
+#line 1181 "runarray.in"
+  addFunc(ve, run::gen_runarray49, realArray(), SYM(solve), formal(realArray2(), SYM(a), false, false), formal(realArray(), SYM(b), false, false), formal(primBoolean(), SYM(warn), true, false));
+#line 1234 "runarray.in"
+  addFunc(ve, run::gen_runarray50, realArray2(), SYM(solve), formal(realArray2(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false), formal(primBoolean(), SYM(warn), true, false));
+#line 1299 "runarray.in"
+  addFunc(ve, run::gen_runarray51, primReal(), SYM(determinant), formal(realArray2(), SYM(a), false, false));
+#line 1316 "runarray.in"
+  addFunc(ve, run::gen_runarray52, realArray(), SYM_TIMES, formal(realArray2(), SYM(a), false, false), formal(realArray(), SYM(b), false, false));
+#line 1335 "runarray.in"
+  addFunc(ve, run::gen_runarray53, realArray(), SYM_TIMES, formal(realArray(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false));
+#line 1364 "runarray.in"
+  addFunc(ve, run::gen_runarray54, IntArray2(), SYM_TIMES, formal(IntArray2(), SYM(a), false, false), formal(IntArray2(), SYM(b), false, false));
+#line 1369 "runarray.in"
+  addFunc(ve, run::gen_runarray55, realArray2(), SYM_TIMES, formal(realArray2(), SYM(a), false, false), formal(realArray2(), SYM(b), false, false));
+#line 1374 "runarray.in"
+  addFunc(ve, run::gen_runarray56, pairArray2(), SYM_TIMES, formal(pairArray2(), SYM(a), false, false), formal(pairArray2(), SYM(b), false, false));
+#line 1379 "runarray.in"
+  addFunc(ve, run::gen_runarray57, primTriple(), SYM_TIMES, formal(realArray2(), SYM(t), false, false), formal(primTriple(), SYM(v), false, false));
+#line 1384 "runarray.in"
+  addFunc(ve, run::gen_runarray58, realArray2(), SYM(AtA), formal(realArray2(), SYM(a), false, false));
+#line 1389 "runarray.in"
+  addFunc(ve, run::gen_runarray59, primPair(), SYM(project), formal(primTriple(), SYM(v), false, false), formal(realArray2(), SYM(t), false, false));
+#line 1414 "runarray.in"
+  addFunc(ve, run::gen_runarray60, primReal(), SYM(dot), formal(realArray(), SYM(a), false, false), formal(realArray(), SYM(b), false, false));
+#line 1424 "runarray.in"
+  addFunc(ve, run::gen_runarray61, primPair(), SYM(dot), formal(pairArray(), SYM(a), false, false), formal(pairArray(), SYM(b), false, false));
+#line 1434 "runarray.in"
+  addFunc(ve, run::gen_runarray62, realArray(), SYM(tridiagonal), formal(realArray(), SYM(a), false, false), formal(realArray(), SYM(b), false, false), formal(realArray(), SYM(c), false, false), formal(realArray(), SYM(f), false, false));
+#line 1538 "runarray.in"
+  addFunc(ve, run::gen_runarray63, primReal(), SYM(newton), formal(primInt(), SYM(iterations), true, false), formal(realRealFunction(), SYM(f), false, false), formal(realRealFunction(), SYM(fprime), false, false), formal(primReal(), SYM(x), false, false), formal(primBoolean(), SYM(verbose), true, false));
+#line 1585 "runarray.in"
+  addFunc(ve, run::gen_runarray64, primReal(), SYM(newton), formal(primInt(), SYM(iterations), true, false), formal(realRealFunction(), SYM(f), false, false), formal(realRealFunction(), SYM(fprime), false, false), formal(primReal(), SYM(x1), false, false), formal(primReal(), SYM(x2), false, false), formal(primBoolean(), SYM(verbose), true, false));
+#line 1667 "runarray.in"
+  addFunc(ve, run::gen_runarray65, primReal(), SYM(_findroot), formal(realRealFunction(), SYM(f), false, false), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(tolerance), false, false), formal(primReal(), SYM(fa), false, false), formal(primReal(), SYM(fb), false, false));
+#line 1769 "runarray.in"
+  addFunc(ve, run::gen_runarray66, primReal(), SYM(simpson), formal(realRealFunction(), SYM(f), false, false), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(acc), true, false), formal(primReal(), SYM(dxmax), true, false));
+#line 1783 "runarray.in"
+  addFunc(ve, run::gen_runarray67, pairArray(), SYM(fft), formal(pairArray(), SYM(a), false, false), formal(primInt(), SYM(sign), true, false));
+#line 1814 "runarray.in"
+  addFunc(ve, run::gen_runarray68, IntArray2(), SYM(triangulate), formal(pairArray(), SYM(z), false, false));
+#line 1849 "runarray.in"
+  addFunc(ve, run::gen_runarray69, primReal(), SYM(norm), formal(realArray(), SYM(a), false, false));
+#line 1860 "runarray.in"
+  addFunc(ve, run::gen_runarray70, primReal(), SYM(norm), formal(realArray2(), SYM(a), false, false));
+#line 1875 "runarray.in"
+  addFunc(ve, run::gen_runarray71, primReal(), SYM(norm), formal(tripleArray2(), SYM(a), false, false));
+#line 1890 "runarray.in"
+  addFunc(ve, run::gen_runarray72, primReal(), SYM(change2), formal(tripleArray2(), SYM(a), false, false));
+#line 1912 "runarray.in"
+  addFunc(ve, run::gen_runarray73, primTriple(), SYM(minbezier), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(b), false, false));
+#line 1924 "runarray.in"
+  addFunc(ve, run::gen_runarray74, primTriple(), SYM(maxbezier), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(b), false, false));
+#line 1936 "runarray.in"
+  addFunc(ve, run::gen_runarray75, primPair(), SYM(minratio), formal(tripleArray2(), SYM(p), false, false), formal(primPair(), SYM(b), false, false));
+#line 1948 "runarray.in"
+  addFunc(ve, run::gen_runarray76, primPair(), SYM(maxratio), formal(tripleArray2(), SYM(p), false, false), formal(primPair(), SYM(b), false, false));
+#line 1960 "runarray.in"
+  addFunc(ve, run::gen_runarray77, realArray(), SYM(_projection));
 }
 
 } // namespace trans

Modified: trunk/Build/source/utils/asymptote/runarray.in
===================================================================
--- trunk/Build/source/utils/asymptote/runarray.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runarray.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -1102,7 +1102,7 @@
   return c;
 }
 

-// In a boolean array, find the index of the nth true value or -1 if not found
+// Find the index of the nth true value in a boolean array or -1 if not found.
 // If n is negative, search backwards.
 Int find(boolarray *a, Int n=1)
 {
@@ -1121,6 +1121,19 @@
   return j;
 }
 

+// Find all indices of true values in a boolean array. 
+Intarray *findall(boolarray *a)
+{
+  size_t size=checkArray(a);
+  array *b=new array(0);
+  for(size_t i=0; i < size; i++) {
+    if(read<bool>(a,i)) {
+      b->push((Int) i);
+    }
+  }
+  return b;
+}
+

 // construct vector obtained by replacing those elements of b for which the
 // corresponding elements of a are false by the corresponding element of c.
 array* :arrayConditional(array *a, array *b, array *c)

Modified: trunk/Build/source/utils/asymptote/runlabel.cc
===================================================================
--- trunk/Build/source/utils/asymptote/runlabel.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runlabel.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -182,7 +182,6 @@
   
     mem::vector<solvedKnot> nodes;
     solvedKnot node;
-    bool cyclic=false;
     bool active=false;
   
     array *P=new array(0);
@@ -196,28 +195,6 @@
       switch(c) {
         case 'M':
         {
-          if(active) {
-            if(cyclic) {
-              if(node.point == nodes[0].point)
-                nodes[0].pre=node.pre;
-              else {
-                pair delta=(nodes[0].point-node.point)*third;
-                node.post=node.point+delta;
-                nodes[0].pre=nodes[0].point-delta;
-                node.straight=true;
-                nodes.push_back(node);
-              }
-            } else {
-              node.post=node.point;
-              node.straight=false;
-              nodes.push_back(node);
-            }
-            if(cyclic) // Discard noncyclic paths.
-              P->push(path(nodes,nodes.size(),cyclic));
-            nodes.clear();
-          }
-          active=false;
-          cyclic=false;
           node.pre=node.point=readpair(buf,hscale,vscale);
           node.straight=false;
           break;
@@ -248,7 +225,21 @@
         }
         case 'c':
         {
-          cyclic=true;
+          if(active) {
+            if(node.point == nodes[0].point)
+              nodes[0].pre=node.pre;
+            else {
+              pair delta=(nodes[0].point-node.point)*third;
+              node.post=node.point+delta;
+              nodes[0].pre=nodes[0].point-delta;
+              node.straight=true;
+              nodes.push_back(node);
+            }
+            P->push(path(nodes,nodes.size(),true)); // Discard noncyclic paths
+            nodes.clear();
+          }
+          active=false;
+          node.straight=false;
           break;
         }
       }
@@ -272,7 +263,7 @@
 
 #endif
 namespace run {
-#line 223 "runlabel.in"
+#line 214 "runlabel.in"
 // void label(picture *f, string *s, string *size, transform t, pair position,           pair align, pen p);
 void gen_runlabel0(stack *Stack)
 {
@@ -283,26 +274,26 @@
   string * size=vm::pop<string *>(Stack);
   string * s=vm::pop<string *>(Stack);
   picture * f=vm::pop<picture *>(Stack);
-#line 225 "runlabel.in"
+#line 216 "runlabel.in"
   f->append(new drawLabel(*s,*size,t,position,align,p));
 }
 
-#line 229 "runlabel.in"
+#line 220 "runlabel.in"
 // bool labels(picture *f);
 void gen_runlabel1(stack *Stack)
 {
   picture * f=vm::pop<picture *>(Stack);
-#line 230 "runlabel.in"
+#line 221 "runlabel.in"
   {Stack->push<bool>(f->havelabels()); return;}
 }
 
-#line 234 "runlabel.in"
+#line 225 "runlabel.in"
 // realarray* texsize(string *s, pen p=CURRENTPEN);
 void gen_runlabel2(stack *Stack)
 {
   pen p=vm::pop<pen>(Stack,CURRENTPEN);
   string * s=vm::pop<string *>(Stack);
-#line 235 "runlabel.in"
+#line 226 "runlabel.in"
   texinit();
   processDataStruct &pd=processData();
   
@@ -319,13 +310,13 @@
   {Stack->push<realarray*>(t); return;}
 }
 
-#line 252 "runlabel.in"
+#line 243 "runlabel.in"
 // patharray2* _texpath(stringarray *s, penarray *p);
 void gen_runlabel3(stack *Stack)
 {
   penarray * p=vm::pop<penarray *>(Stack);
   stringarray * s=vm::pop<stringarray *>(Stack);
-#line 253 "runlabel.in"
+#line 244 "runlabel.in"
   size_t n=checkArrays(s,p);
   if(n == 0) {Stack->push<patharray2*>(new array(0)); return;}
   
@@ -468,13 +459,13 @@
     readpath(psname,keep,false,0.12,-1.0)); return;}
 }
 
-#line 396 "runlabel.in"
+#line 387 "runlabel.in"
 // patharray2* textpath(stringarray *s, penarray *p);
 void gen_runlabel4(stack *Stack)
 {
   penarray * p=vm::pop<penarray *>(Stack);
   stringarray * s=vm::pop<stringarray *>(Stack);
-#line 397 "runlabel.in"
+#line 388 "runlabel.in"
   size_t n=checkArrays(s,p);
   if(n == 0) {Stack->push<patharray2*>(new array(0)); return;}
   
@@ -547,13 +538,13 @@
   {Stack->push<patharray2*>(readpath(psname,keep,false,0.1)); return;}
 }
 
-#line 470 "runlabel.in"
+#line 461 "runlabel.in"
 // patharray* _strokepath(path g, pen p=CURRENTPEN);
 void gen_runlabel5(stack *Stack)
 {
   pen p=vm::pop<pen>(Stack,CURRENTPEN);
   path g=vm::pop<path>(Stack);
-#line 471 "runlabel.in"
+#line 462 "runlabel.in"
   array *P=new array(0);
   if(g.size() == 0) {Stack->push<patharray*>(P); return;}
   
@@ -583,17 +574,17 @@
 
 void gen_runlabel_venv(venv &ve)
 {
-#line 223 "runlabel.in"
+#line 214 "runlabel.in"
   addFunc(ve, run::gen_runlabel0, primVoid(), SYM(label), formal(primPicture(), SYM(f), false, false), formal(primString(), SYM(s), false, false), formal(primString(), SYM(size), false, false), formal(primTransform(), SYM(t), false, false), formal(primPair(), SYM(position), false, false), formal(primPair(), SYM(align), false, false), formal(primPen(), SYM(p), false, false));
-#line 229 "runlabel.in"
+#line 220 "runlabel.in"
   addFunc(ve, run::gen_runlabel1, primBoolean(), SYM(labels), formal(primPicture(), SYM(f), false, false));
-#line 234 "runlabel.in"
+#line 225 "runlabel.in"
   addFunc(ve, run::gen_runlabel2, realArray(), SYM(texsize), formal(primString(), SYM(s), false, false), formal(primPen(), SYM(p), true, false));
-#line 252 "runlabel.in"
+#line 243 "runlabel.in"
   addFunc(ve, run::gen_runlabel3, pathArray2() , SYM(_texpath), formal(stringArray() , SYM(s), false, false), formal(penArray() , SYM(p), false, false));
-#line 396 "runlabel.in"
+#line 387 "runlabel.in"
   addFunc(ve, run::gen_runlabel4, pathArray2() , SYM(textpath), formal(stringArray() , SYM(s), false, false), formal(penArray() , SYM(p), false, false));
-#line 470 "runlabel.in"
+#line 461 "runlabel.in"
   addFunc(ve, run::gen_runlabel5, pathArray() , SYM(_strokepath), formal(primPath(), SYM(g), false, false), formal(primPen(), SYM(p), true, false));
 }
 

Modified: trunk/Build/source/utils/asymptote/runlabel.in
===================================================================
--- trunk/Build/source/utils/asymptote/runlabel.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runlabel.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -136,7 +136,6 @@
   
     mem::vector<solvedKnot> nodes;
     solvedKnot node;
-    bool cyclic=false;
     bool active=false;
   
     array *P=new array(0);
@@ -150,28 +149,6 @@
       switch(c) {
         case 'M':
         {
-          if(active) {
-            if(cyclic) {
-              if(node.point == nodes[0].point)
-                nodes[0].pre=node.pre;
-              else {
-                pair delta=(nodes[0].point-node.point)*third;
-                node.post=node.point+delta;
-                nodes[0].pre=nodes[0].point-delta;
-                node.straight=true;
-                nodes.push_back(node);
-              }
-            } else {
-              node.post=node.point;
-              node.straight=false;
-              nodes.push_back(node);
-            }
-            if(cyclic) // Discard noncyclic paths.
-              P->push(path(nodes,nodes.size(),cyclic));
-            nodes.clear();
-          }
-          active=false;
-          cyclic=false;
           node.pre=node.point=readpair(buf,hscale,vscale);
           node.straight=false;
           break;
@@ -202,7 +179,21 @@
         }
         case 'c':
         {
-          cyclic=true;
+          if(active) {
+            if(node.point == nodes[0].point)
+              nodes[0].pre=node.pre;
+            else {
+              pair delta=(nodes[0].point-node.point)*third;
+              node.post=node.point+delta;
+              nodes[0].pre=nodes[0].point-delta;
+              node.straight=true;
+              nodes.push_back(node);
+            }
+            P->push(path(nodes,nodes.size(),true)); // Discard noncyclic paths
+            nodes.clear();
+          }
+          active=false;
+          node.straight=false;
           break;
         }
       }

Modified: trunk/Build/source/utils/asymptote/runmath.cc
===================================================================
--- trunk/Build/source/utils/asymptote/runmath.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runmath.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -87,6 +87,118 @@
 
 extern uint32_t CLZ(uint32_t a);
 
+inline unsigned intbits() {
+  static unsigned count=0;
+  if(count > 0) return count;
+  while((1UL << count) < Int_MAX)
+    ++count;
+  ++count;
+  return count;
+}
+
+static const unsigned char BitReverseTable8[256]=
+{
+#define R2(n)     n,    n+2*64,    n+1*64,    n+3*64
+#define R4(n) R2(n),R2(n+2*16),R2(n+1*16),R2(n+3*16)
+#define R6(n) R4(n),R4(n+2*4 ),R4(n+1*4 ),R4(n+3*4 )
+R6(0),R6(2),R6(1),R6(3)
+};
+#undef R2
+#undef R4
+#undef R6
+
+unsigned long long bitreverse8(unsigned long long a)
+{
+  return
+    (unsigned long long) BitReverseTable8[a]; 
+}
+
+unsigned long long bitreverse16(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 8) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8)]);
+}
+
+unsigned long long bitreverse24(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 16) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 8) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16)]);
+}
+
+unsigned long long bitreverse32(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 24) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 16) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 24)]);
+}
+
+unsigned long long bitreverse40(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 32) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 24) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 16) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 32)]);
+}
+
+unsigned long long bitreverse48(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 40) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 32) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 24) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 16) |
+    ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 40)]);
+}
+
+unsigned long long bitreverse56(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 48) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 40) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 32) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 24) |
+    ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 16) |
+    ((unsigned long long) BitReverseTable8[(a >> 40) & 0xff] << 8) | 
+    ((unsigned long long) BitReverseTable8[(a >> 48)]);
+}
+
+unsigned long long bitreverse64(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 56) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 48) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 40) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 32) |
+    ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 24) |
+    ((unsigned long long) BitReverseTable8[(a >> 40) & 0xff] << 16) | 
+    ((unsigned long long) BitReverseTable8[(a >> 48) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 56)]);
+}
+
+// From Warren, Jr., Henry S. (2013) [2002]. Hacker's Delight (2 ed.).
+// Addison Wesley - Pearson Education, Inc. pp. 81-96. 
+Int popcount(Int a)
+{
+  const uint64_t m1  = 0x5555555555555555; //binary: 0101...
+  const uint64_t m2  = 0x3333333333333333; //binary: 00110011..
+  const uint64_t m4  = 0x0f0f0f0f0f0f0f0f; //binary:  4 zeros,  4 ones ...
+  const uint64_t h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3...
+
+// This algorithm uses 12 arithmetic operations, one of which is a multiply.
+  a -= (a >> 1) & m1;         //put count of each 2 bits into those 2 bits
+  a=(a & m2)+((a >> 2) & m2); //put count of each 4 bits into those 4 bits 
+  a=(a+(a >> 4)) & m4;        //put count of each 8 bits into those 8 bits 
+  return (a * h01) >> 56;  //returns left 8 bits of a+(a << 8)+(a << 16)+(a << 24)+... 
+}
+
 // Return the factorial of a non-negative integer using a lookup table.
 Int factorial(Int n)
 {
@@ -137,233 +249,233 @@
 
 #endif
 namespace run {
-#line 81 "runmath.in"
+#line 193 "runmath.in"
 // real ^(real x, Int y);
 void gen_runmath0(stack *Stack)
 {
   Int y=vm::pop<Int>(Stack);
   real x=vm::pop<real>(Stack);
-#line 82 "runmath.in"
+#line 194 "runmath.in"
   {Stack->push<real>(pow(x,y)); return;}
 }
 
-#line 86 "runmath.in"
+#line 198 "runmath.in"
 // pair ^(pair z, Int y);
 void gen_runmath1(stack *Stack)
 {
   Int y=vm::pop<Int>(Stack);
   pair z=vm::pop<pair>(Stack);
-#line 87 "runmath.in"
+#line 199 "runmath.in"
   {Stack->push<pair>(pow(z,y)); return;}
 }
 
-#line 91 "runmath.in"
+#line 203 "runmath.in"
 // Int quotient(Int x, Int y);
 void gen_runmath2(stack *Stack)
 {
   Int y=vm::pop<Int>(Stack);
   Int x=vm::pop<Int>(Stack);
-#line 92 "runmath.in" 
+#line 204 "runmath.in" 
   {Stack->push<Int>(quotient<Int>()(x,y)); return;}
 }
 
-#line 96 "runmath.in"
+#line 208 "runmath.in"
 // Int abs(Int x);
 void gen_runmath3(stack *Stack)
 {
   Int x=vm::pop<Int>(Stack);
-#line 97 "runmath.in" 
+#line 209 "runmath.in" 
   {Stack->push<Int>(Abs(x)); return;}
 }
 
-#line 101 "runmath.in"
+#line 213 "runmath.in"
 // Int sgn(real x);
 void gen_runmath4(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 102 "runmath.in" 
+#line 214 "runmath.in" 
   {Stack->push<Int>(sgn(x)); return;}
 }
 
-#line 106 "runmath.in"
+#line 218 "runmath.in"
 // Int rand();
 void gen_runmath5(stack *Stack)
 {
-#line 107 "runmath.in" 
+#line 219 "runmath.in" 
   if(initializeRandom)
     Srand(1);
   {Stack->push<Int>(random()); return;}
 }
 
-#line 113 "runmath.in"
+#line 225 "runmath.in"
 // void srand(Int seed);
 void gen_runmath6(stack *Stack)
 {
   Int seed=vm::pop<Int>(Stack);
-#line 114 "runmath.in" 
+#line 226 "runmath.in" 
   Srand(seed);
 }
 
 // a random number uniformly distributed in the interval [0,1]
-#line 119 "runmath.in"
+#line 231 "runmath.in"
 // real unitrand();
 void gen_runmath7(stack *Stack)
 {
-#line 120 "runmath.in"                         
+#line 232 "runmath.in"                         
   {Stack->push<real>(((real) random())/RANDOM_MAX); return;}
 }
 
-#line 124 "runmath.in"
+#line 236 "runmath.in"
 // Int ceil(real x);
 void gen_runmath8(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 125 "runmath.in" 
+#line 237 "runmath.in" 
   {Stack->push<Int>(Intcast(ceil(x))); return;}
 }
 
-#line 129 "runmath.in"
+#line 241 "runmath.in"
 // Int floor(real x);
 void gen_runmath9(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 130 "runmath.in" 
+#line 242 "runmath.in" 
   {Stack->push<Int>(Intcast(floor(x))); return;}
 }
 
-#line 134 "runmath.in"
+#line 246 "runmath.in"
 // Int round(real x);
 void gen_runmath10(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 135 "runmath.in" 
+#line 247 "runmath.in" 
   if(validInt(x)) {Stack->push<Int>(Round(x)); return;}
   integeroverflow(0);
 }
 
-#line 140 "runmath.in"
+#line 252 "runmath.in"
 // Int Ceil(real x);
 void gen_runmath11(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 141 "runmath.in" 
+#line 253 "runmath.in" 
   {Stack->push<Int>(Ceil(x)); return;}
 }
 
-#line 145 "runmath.in"
+#line 257 "runmath.in"
 // Int Floor(real x);
 void gen_runmath12(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 146 "runmath.in" 
+#line 258 "runmath.in" 
   {Stack->push<Int>(Floor(x)); return;}
 }
 
-#line 150 "runmath.in"
+#line 262 "runmath.in"
 // Int Round(real x);
 void gen_runmath13(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 151 "runmath.in" 
+#line 263 "runmath.in" 
   {Stack->push<Int>(Round(Intcap(x))); return;}
 }
 
-#line 155 "runmath.in"
+#line 267 "runmath.in"
 // real fmod(real x, real y);
 void gen_runmath14(stack *Stack)
 {
   real y=vm::pop<real>(Stack);
   real x=vm::pop<real>(Stack);
-#line 156 "runmath.in"
+#line 268 "runmath.in"
   if (y == 0.0) dividebyzero();
   {Stack->push<real>(fmod(x,y)); return;}
 }
 
-#line 161 "runmath.in"
+#line 273 "runmath.in"
 // real atan2(real y, real x);
 void gen_runmath15(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
   real y=vm::pop<real>(Stack);
-#line 162 "runmath.in" 
+#line 274 "runmath.in" 
   {Stack->push<real>(atan2(y,x)); return;}
 }
 
-#line 166 "runmath.in"
+#line 278 "runmath.in"
 // real hypot(real x, real y);
 void gen_runmath16(stack *Stack)
 {
   real y=vm::pop<real>(Stack);
   real x=vm::pop<real>(Stack);
-#line 167 "runmath.in" 
+#line 279 "runmath.in" 
   {Stack->push<real>(hypot(x,y)); return;}
 }
 
-#line 171 "runmath.in"
+#line 283 "runmath.in"
 // real remainder(real x, real y);
 void gen_runmath17(stack *Stack)
 {
   real y=vm::pop<real>(Stack);
   real x=vm::pop<real>(Stack);
-#line 172 "runmath.in" 
+#line 284 "runmath.in" 
   {Stack->push<real>(remainder(x,y)); return;}
 }
 
-#line 176 "runmath.in"
+#line 288 "runmath.in"
 // real Jn(Int n, real x);
 void gen_runmath18(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
   Int n=vm::pop<Int>(Stack);
-#line 177 "runmath.in"
+#line 289 "runmath.in"
   {Stack->push<real>(jn(n,x)); return;}
 }
 
-#line 181 "runmath.in"
+#line 293 "runmath.in"
 // real Yn(Int n, real x);
 void gen_runmath19(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
   Int n=vm::pop<Int>(Stack);
-#line 182 "runmath.in"
+#line 294 "runmath.in"
   {Stack->push<real>(yn(n,x)); return;}
 }
 
-#line 186 "runmath.in"
+#line 298 "runmath.in"
 // real erf(real x);
 void gen_runmath20(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 187 "runmath.in"
+#line 299 "runmath.in"
   {Stack->push<real>(erf(x)); return;}
 }
 
-#line 191 "runmath.in"
+#line 303 "runmath.in"
 // real erfc(real x);
 void gen_runmath21(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 192 "runmath.in"
+#line 304 "runmath.in"
   {Stack->push<real>(erfc(x)); return;}
 }
 
-#line 196 "runmath.in"
+#line 308 "runmath.in"
 // Int factorial(Int n);
 void gen_runmath22(stack *Stack)
 {
   Int n=vm::pop<Int>(Stack);
-#line 197 "runmath.in"
+#line 309 "runmath.in"
   if(n < 0) error(invalidargument);
   {Stack->push<Int>(factorial(n)); return;}
 }
 
-#line 201 "runmath.in"
+#line 313 "runmath.in"
 // Int choose(Int n, Int k);
 void gen_runmath23(stack *Stack)
 {
   Int k=vm::pop<Int>(Stack);
   Int n=vm::pop<Int>(Stack);
-#line 202 "runmath.in"
+#line 314 "runmath.in"
   if(n < 0 || k < 0 || k > n) error(invalidargument);
   Int f=1;
   Int r=n-k;
@@ -374,12 +486,12 @@
   {Stack->push<Int>(f); return;}
 }
 
-#line 212 "runmath.in"
+#line 324 "runmath.in"
 // real gamma(real x);
 void gen_runmath24(stack *Stack)
 {
   real x=vm::pop<real>(Stack);
-#line 213 "runmath.in"
+#line 325 "runmath.in"
 #ifdef HAVE_TGAMMA
   {Stack->push<real>(tgamma(x)); return;}
 #else
@@ -388,7 +500,7 @@
 #endif
 }
 
-#line 222 "runmath.in"
+#line 334 "runmath.in"
 // realarray* quadraticroots(real a, real b, real c);
 void gen_runmath25(stack *Stack)
 {
@@ -395,7 +507,7 @@
   real c=vm::pop<real>(Stack);
   real b=vm::pop<real>(Stack);
   real a=vm::pop<real>(Stack);
-#line 223 "runmath.in"
+#line 335 "runmath.in"
   quadraticroots q(a,b,c);
   array *roots=new array(q.roots);
   if(q.roots >= 1) (*roots)[0]=q.t1;
@@ -403,7 +515,7 @@
   {Stack->push<realarray*>(roots); return;}
 }
 
-#line 231 "runmath.in"
+#line 343 "runmath.in"
 // pairarray* quadraticroots(explicit pair a, explicit pair b, explicit pair c);
 void gen_runmath26(stack *Stack)
 {
@@ -410,7 +522,7 @@
   pair c=vm::pop<pair>(Stack);
   pair b=vm::pop<pair>(Stack);
   pair a=vm::pop<pair>(Stack);
-#line 232 "runmath.in"
+#line 344 "runmath.in"
   Quadraticroots q(a,b,c);
   array *roots=new array(q.roots);
   if(q.roots >= 1) (*roots)[0]=q.z1;
@@ -418,7 +530,7 @@
   {Stack->push<pairarray*>(roots); return;}
 }
 
-#line 240 "runmath.in"
+#line 352 "runmath.in"
 // realarray* cubicroots(real a, real b, real c, real d);
 void gen_runmath27(stack *Stack)
 {
@@ -426,7 +538,7 @@
   real c=vm::pop<real>(Stack);
   real b=vm::pop<real>(Stack);
   real a=vm::pop<real>(Stack);
-#line 241 "runmath.in"
+#line 353 "runmath.in"
   cubicroots q(a,b,c,d);
   array *roots=new array(q.roots);
   if(q.roots >= 1) (*roots)[0]=q.t1;
@@ -437,122 +549,147 @@
 
 
 // Logical operations
-#line 252 "runmath.in"
+#line 364 "runmath.in"
 // bool !(bool b);
 void gen_runmath28(stack *Stack)
 {
   bool b=vm::pop<bool>(Stack);
-#line 253 "runmath.in"
+#line 365 "runmath.in"
   {Stack->push<bool>(!b); return;}
 }
 
-#line 258 "runmath.in"
+#line 370 "runmath.in"
 void boolMemEq(stack *Stack)
 {
   frame * b=vm::pop<frame *>(Stack);
   frame * a=vm::pop<frame *>(Stack);
-#line 259 "runmath.in"
+#line 371 "runmath.in"
   {Stack->push<bool>(a == b); return;}
 }
 
-#line 263 "runmath.in"
+#line 375 "runmath.in"
 void boolMemNeq(stack *Stack)
 {
   frame * b=vm::pop<frame *>(Stack);
   frame * a=vm::pop<frame *>(Stack);
-#line 264 "runmath.in"
+#line 376 "runmath.in"
   {Stack->push<bool>(a != b); return;}
 }
 
-#line 268 "runmath.in"
+#line 380 "runmath.in"
 void boolFuncEq(stack *Stack)
 {
   callable * b=vm::pop<callable *>(Stack);
   callable * a=vm::pop<callable *>(Stack);
-#line 269 "runmath.in"
+#line 381 "runmath.in"
   {Stack->push<bool>(a->compare(b)); return;}
 }
 
-#line 273 "runmath.in"
+#line 385 "runmath.in"
 void boolFuncNeq(stack *Stack)
 {
   callable * b=vm::pop<callable *>(Stack);
   callable * a=vm::pop<callable *>(Stack);
-#line 274 "runmath.in"
+#line 386 "runmath.in"
   {Stack->push<bool>(!(a->compare(b))); return;}
 }
 
 
 // Bit operations
-#line 280 "runmath.in"
+#line 392 "runmath.in"
 // Int AND(Int a, Int b);
 void gen_runmath33(stack *Stack)
 {
   Int b=vm::pop<Int>(Stack);
   Int a=vm::pop<Int>(Stack);
-#line 281 "runmath.in"
+#line 393 "runmath.in"
   {Stack->push<Int>(a & b); return;}
 }
 
-#line 286 "runmath.in"
+#line 398 "runmath.in"
 // Int OR(Int a, Int b);
 void gen_runmath34(stack *Stack)
 {
   Int b=vm::pop<Int>(Stack);
   Int a=vm::pop<Int>(Stack);
-#line 287 "runmath.in"
+#line 399 "runmath.in"
   {Stack->push<Int>(a | b); return;}
 }
 
-#line 291 "runmath.in"
+#line 403 "runmath.in"
 // Int XOR(Int a, Int b);
 void gen_runmath35(stack *Stack)
 {
   Int b=vm::pop<Int>(Stack);
   Int a=vm::pop<Int>(Stack);
-#line 292 "runmath.in"
+#line 404 "runmath.in"
   {Stack->push<Int>(a ^ b); return;}
 }
 
-#line 296 "runmath.in"
+#line 408 "runmath.in"
 // Int NOT(Int a);
 void gen_runmath36(stack *Stack)
 {
   Int a=vm::pop<Int>(Stack);
-#line 297 "runmath.in"
+#line 409 "runmath.in"
   {Stack->push<Int>(~a); return;}
 }
 
-#line 301 "runmath.in"
+#line 413 "runmath.in"
 // Int CLZ(Int a);
 void gen_runmath37(stack *Stack)
 {
   Int a=vm::pop<Int>(Stack);
-#line 302 "runmath.in"
-  if((uint32_t) a > 0xFFFFFFFF) {Stack->push<Int>(-1); return;}
-  {Stack->push<Int>(CLZ((uint32_t) a)); return;}
+#line 414 "runmath.in"
+  if((unsignedInt) a > 0xFFFFFFFF)
+    {Stack->push<Int>(CLZ((uint32_t) (a >> 32))); return;}
+  else {
+    int bits=intbits();
+    if(a != 0) {Stack->push<Int>(bits-32+CLZ((uint32_t) a)); return;}
+    {Stack->push<Int>(bits); return;}
+  }
 }
 
-#line 307 "runmath.in"
-// Int CTZ(Int a);
+#line 424 "runmath.in"
+// Int popcount(Int a);
 void gen_runmath38(stack *Stack)
 {
   Int a=vm::pop<Int>(Stack);
-#line 308 "runmath.in"
-  if((uint32_t) a > 0xFFFFFFFF) {Stack->push<Int>(-1); return;}
-#if __GNUC__
-  {Stack->push<Int>(__builtin_ctz(a)); return;}
-#else
-  // find the number of trailing zeros in a 32-bit number
-  static const int MultiplyDeBruijnBitPosition[32] = {
-    0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 
-    31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
-  };
-  {Stack->push<Int>(MultiplyDeBruijnBitPosition[((uint32_t)((a & -a) * 0x077CB531U))
-                                     >> 27]); return;}
-#endif
+#line 425 "runmath.in"
+  {Stack->push<Int>(popcount(a)); return;}
 }
 
+#line 429 "runmath.in"
+// Int CTZ(Int a);
+void gen_runmath39(stack *Stack)
+{
+  Int a=vm::pop<Int>(Stack);
+#line 430 "runmath.in"
+  {Stack->push<Int>(popcount((a&-a)-1)); return;}
+}
+
+// bitreverse a within a word of length bits.
+#line 435 "runmath.in"
+// Int bitreverse(Int a, Int bits);
+void gen_runmath40(stack *Stack)
+{
+  Int bits=vm::pop<Int>(Stack);
+  Int a=vm::pop<Int>(Stack);
+#line 436 "runmath.in"
+  typedef unsigned long long Bitreverse(unsigned long long a);
+  static Bitreverse *B[]={bitreverse8,bitreverse16,bitreverse24,bitreverse32,
+                     bitreverse40,bitreverse48,bitreverse56,bitreverse64};
+  int maxbits=intbits()-1; // Drop sign bit
+#if Int_MAX2 >= 0x7fffffffffffffffLL
+  --maxbits;               // Drop extra bit for reserved values
+#endif  
+  if(bits <= 0 || bits > maxbits || a < 0 ||
+     (unsigned long long) a >= (1ULL << bits))
+    {Stack->push<Int>(-1); return;}
+  unsigned int bytes=(bits+7)/8;
+  {Stack->push<Int>(B[bytes-1]((unsigned long long) a) >> (8*bytes-bits)); return;}
+}
+
 } // namespace run
 
 namespace trans {
@@ -559,84 +696,88 @@
 
 void gen_runmath_venv(venv &ve)
 {
-#line 81 "runmath.in"
+#line 193 "runmath.in"
   addFunc(ve, run::gen_runmath0, primReal(), SYM_CARET, formal(primReal(), SYM(x), false, false), formal(primInt(), SYM(y), false, false));
-#line 86 "runmath.in"
+#line 198 "runmath.in"
   addFunc(ve, run::gen_runmath1, primPair(), SYM_CARET, formal(primPair(), SYM(z), false, false), formal(primInt(), SYM(y), false, false));
-#line 91 "runmath.in"
+#line 203 "runmath.in"
   addFunc(ve, run::gen_runmath2, primInt(), SYM(quotient), formal(primInt(), SYM(x), false, false), formal(primInt(), SYM(y), false, false));
-#line 96 "runmath.in"
+#line 208 "runmath.in"
   addFunc(ve, run::gen_runmath3, primInt(), SYM(abs), formal(primInt(), SYM(x), false, false));
-#line 101 "runmath.in"
+#line 213 "runmath.in"
   addFunc(ve, run::gen_runmath4, primInt(), SYM(sgn), formal(primReal(), SYM(x), false, false));
-#line 106 "runmath.in"
+#line 218 "runmath.in"
   addFunc(ve, run::gen_runmath5, primInt(), SYM(rand));
-#line 113 "runmath.in"
+#line 225 "runmath.in"
   addFunc(ve, run::gen_runmath6, primVoid(), SYM(srand), formal(primInt(), SYM(seed), false, false));
-#line 118 "runmath.in"
+#line 230 "runmath.in"
   addFunc(ve, run::gen_runmath7, primReal(), SYM(unitrand));
-#line 124 "runmath.in"
+#line 236 "runmath.in"
   addFunc(ve, run::gen_runmath8, primInt(), SYM(ceil), formal(primReal(), SYM(x), false, false));
-#line 129 "runmath.in"
+#line 241 "runmath.in"
   addFunc(ve, run::gen_runmath9, primInt(), SYM(floor), formal(primReal(), SYM(x), false, false));
-#line 134 "runmath.in"
+#line 246 "runmath.in"
   addFunc(ve, run::gen_runmath10, primInt(), SYM(round), formal(primReal(), SYM(x), false, false));
-#line 140 "runmath.in"
+#line 252 "runmath.in"
   addFunc(ve, run::gen_runmath11, primInt(), SYM(Ceil), formal(primReal(), SYM(x), false, false));
-#line 145 "runmath.in"
+#line 257 "runmath.in"
   addFunc(ve, run::gen_runmath12, primInt(), SYM(Floor), formal(primReal(), SYM(x), false, false));
-#line 150 "runmath.in"
+#line 262 "runmath.in"
   addFunc(ve, run::gen_runmath13, primInt(), SYM(Round), formal(primReal(), SYM(x), false, false));
-#line 155 "runmath.in"
+#line 267 "runmath.in"
   addFunc(ve, run::gen_runmath14, primReal(), SYM(fmod), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false));
-#line 161 "runmath.in"
+#line 273 "runmath.in"
   addFunc(ve, run::gen_runmath15, primReal(), SYM(atan2), formal(primReal(), SYM(y), false, false), formal(primReal(), SYM(x), false, false));
-#line 166 "runmath.in"
+#line 278 "runmath.in"
   addFunc(ve, run::gen_runmath16, primReal(), SYM(hypot), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false));
-#line 171 "runmath.in"
+#line 283 "runmath.in"
   addFunc(ve, run::gen_runmath17, primReal(), SYM(remainder), formal(primReal(), SYM(x), false, false), formal(primReal(), SYM(y), false, false));
-#line 176 "runmath.in"
+#line 288 "runmath.in"
   addFunc(ve, run::gen_runmath18, primReal(), SYM(Jn), formal(primInt(), SYM(n), false, false), formal(primReal(), SYM(x), false, false));
-#line 181 "runmath.in"
+#line 293 "runmath.in"
   addFunc(ve, run::gen_runmath19, primReal(), SYM(Yn), formal(primInt(), SYM(n), false, false), formal(primReal(), SYM(x), false, false));
-#line 186 "runmath.in"
+#line 298 "runmath.in"
   addFunc(ve, run::gen_runmath20, primReal(), SYM(erf), formal(primReal(), SYM(x), false, false));
-#line 191 "runmath.in"
+#line 303 "runmath.in"
   addFunc(ve, run::gen_runmath21, primReal(), SYM(erfc), formal(primReal(), SYM(x), false, false));
-#line 196 "runmath.in"
+#line 308 "runmath.in"
   addFunc(ve, run::gen_runmath22, primInt(), SYM(factorial), formal(primInt(), SYM(n), false, false));
-#line 201 "runmath.in"
+#line 313 "runmath.in"
   addFunc(ve, run::gen_runmath23, primInt(), SYM(choose), formal(primInt(), SYM(n), false, false), formal(primInt(), SYM(k), false, false));
-#line 212 "runmath.in"
+#line 324 "runmath.in"
   addFunc(ve, run::gen_runmath24, primReal(), SYM(gamma), formal(primReal(), SYM(x), false, false));
-#line 222 "runmath.in"
+#line 334 "runmath.in"
   addFunc(ve, run::gen_runmath25, realArray(), SYM(quadraticroots), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(c), false, false));
-#line 231 "runmath.in"
+#line 343 "runmath.in"
   addFunc(ve, run::gen_runmath26, pairArray(), SYM(quadraticroots), formal(primPair(), SYM(a), false, true), formal(primPair(), SYM(b), false, true), formal(primPair(), SYM(c), false, true));
-#line 240 "runmath.in"
+#line 352 "runmath.in"
   addFunc(ve, run::gen_runmath27, realArray(), SYM(cubicroots), formal(primReal(), SYM(a), false, false), formal(primReal(), SYM(b), false, false), formal(primReal(), SYM(c), false, false), formal(primReal(), SYM(d), false, false));
-#line 250 "runmath.in"
+#line 362 "runmath.in"
   addFunc(ve, run::gen_runmath28, primBoolean(), SYM_LOGNOT, formal(primBoolean(), SYM(b), false, false));
-#line 258 "runmath.in"
+#line 370 "runmath.in"
   REGISTER_BLTIN(run::boolMemEq,"boolMemEq");
-#line 263 "runmath.in"
+#line 375 "runmath.in"
   REGISTER_BLTIN(run::boolMemNeq,"boolMemNeq");
-#line 268 "runmath.in"
+#line 380 "runmath.in"
   REGISTER_BLTIN(run::boolFuncEq,"boolFuncEq");
-#line 273 "runmath.in"
+#line 385 "runmath.in"
   REGISTER_BLTIN(run::boolFuncNeq,"boolFuncNeq");
-#line 278 "runmath.in"
+#line 390 "runmath.in"
   addFunc(ve, run::gen_runmath33, primInt(), SYM(AND), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false));
-#line 286 "runmath.in"
+#line 398 "runmath.in"
   addFunc(ve, run::gen_runmath34, primInt(), SYM(OR), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false));
-#line 291 "runmath.in"
+#line 403 "runmath.in"
   addFunc(ve, run::gen_runmath35, primInt(), SYM(XOR), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(b), false, false));
-#line 296 "runmath.in"
+#line 408 "runmath.in"
   addFunc(ve, run::gen_runmath36, primInt(), SYM(NOT), formal(primInt(), SYM(a), false, false));
-#line 301 "runmath.in"
+#line 413 "runmath.in"
   addFunc(ve, run::gen_runmath37, primInt(), SYM(CLZ), formal(primInt(), SYM(a), false, false));
-#line 307 "runmath.in"
-  addFunc(ve, run::gen_runmath38, primInt(), SYM(CTZ), formal(primInt(), SYM(a), false, false));
+#line 424 "runmath.in"
+  addFunc(ve, run::gen_runmath38, primInt(), SYM(popcount), formal(primInt(), SYM(a), false, false));
+#line 429 "runmath.in"
+  addFunc(ve, run::gen_runmath39, primInt(), SYM(CTZ), formal(primInt(), SYM(a), false, false));
+#line 434 "runmath.in"
+  addFunc(ve, run::gen_runmath40, primInt(), SYM(bitreverse), formal(primInt(), SYM(a), false, false), formal(primInt(), SYM(bits), false, false));
 }
 
 } // namespace trans

Modified: trunk/Build/source/utils/asymptote/runmath.in
===================================================================
--- trunk/Build/source/utils/asymptote/runmath.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runmath.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -34,6 +34,118 @@
 
 extern uint32_t CLZ(uint32_t a);
 
+inline unsigned intbits() {
+  static unsigned count=0;
+  if(count > 0) return count;
+  while((1UL << count) < Int_MAX)
+    ++count;
+  ++count;
+  return count;
+}
+
+static const unsigned char BitReverseTable8[256]=
+{
+#define R2(n)     n,    n+2*64,    n+1*64,    n+3*64
+#define R4(n) R2(n),R2(n+2*16),R2(n+1*16),R2(n+3*16)
+#define R6(n) R4(n),R4(n+2*4 ),R4(n+1*4 ),R4(n+3*4 )
+R6(0),R6(2),R6(1),R6(3)
+};
+#undef R2
+#undef R4
+#undef R6
+
+unsigned long long bitreverse8(unsigned long long a)
+{
+  return
+    (unsigned long long) BitReverseTable8[a]; 
+}
+
+unsigned long long bitreverse16(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 8) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8)]);
+}
+
+unsigned long long bitreverse24(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 16) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 8) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16)]);
+}
+
+unsigned long long bitreverse32(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 24) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 16) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 24)]);
+}
+
+unsigned long long bitreverse40(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 32) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 24) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 16) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 32)]);
+}
+
+unsigned long long bitreverse48(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 40) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 32) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 24) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 16) |
+    ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 40)]);
+}
+
+unsigned long long bitreverse56(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 48) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 40) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 32) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 24) |
+    ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 16) |
+    ((unsigned long long) BitReverseTable8[(a >> 40) & 0xff] << 8) | 
+    ((unsigned long long) BitReverseTable8[(a >> 48)]);
+}
+
+unsigned long long bitreverse64(unsigned long long a)
+{
+  return
+    ((unsigned long long) BitReverseTable8[a & 0xff] << 56) | 
+    ((unsigned long long) BitReverseTable8[(a >> 8) & 0xff] << 48) | 
+    ((unsigned long long) BitReverseTable8[(a >> 16) & 0xff] << 40) |
+    ((unsigned long long) BitReverseTable8[(a >> 24) & 0xff] << 32) |
+    ((unsigned long long) BitReverseTable8[(a >> 32) & 0xff] << 24) |
+    ((unsigned long long) BitReverseTable8[(a >> 40) & 0xff] << 16) | 
+    ((unsigned long long) BitReverseTable8[(a >> 48) & 0xff] << 8) |
+    ((unsigned long long) BitReverseTable8[(a >> 56)]);
+}
+
+// From Warren, Jr., Henry S. (2013) [2002]. Hacker's Delight (2 ed.).
+// Addison Wesley - Pearson Education, Inc. pp. 81-96. 
+Int popcount(Int a)
+{
+  const uint64_t m1  = 0x5555555555555555; //binary: 0101...
+  const uint64_t m2  = 0x3333333333333333; //binary: 00110011..
+  const uint64_t m4  = 0x0f0f0f0f0f0f0f0f; //binary:  4 zeros,  4 ones ...
+  const uint64_t h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3...
+
+// This algorithm uses 12 arithmetic operations, one of which is a multiply.
+  a -= (a >> 1) & m1;         //put count of each 2 bits into those 2 bits
+  a=(a & m2)+((a >> 2) & m2); //put count of each 4 bits into those 4 bits 
+  a=(a+(a >> 4)) & m4;        //put count of each 8 bits into those 8 bits 
+  return (a * h01) >> 56;  //returns left 8 bits of a+(a << 8)+(a << 16)+(a << 24)+... 
+}
+
 // Return the factorial of a non-negative integer using a lookup table.
 Int factorial(Int n)
 {
@@ -300,22 +412,38 @@
 

 Int CLZ(Int a) 
 {
-  if((uint32_t) a > 0xFFFFFFFF) return -1;
-  return CLZ((uint32_t) a);
+  if((unsignedInt) a > 0xFFFFFFFF)
+    return CLZ((uint32_t) (a >> 32));
+  else {
+    int bits=intbits();
+    if(a != 0) return bits-32+CLZ((uint32_t) a);
+    return bits;
+  }
 }
 

+Int popcount(Int a) 
+{
+  return popcount(a);
+}
+

 Int CTZ(Int a) 
 {
-  if((uint32_t) a > 0xFFFFFFFF) return -1;
-#if __GNUC__
-  return __builtin_ctz(a);
-#else
-  // find the number of trailing zeros in a 32-bit number
-  static const int MultiplyDeBruijnBitPosition[32] = {
-    0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 
-    31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
-  };
-  return MultiplyDeBruijnBitPosition[((uint32_t)((a & -a) * 0x077CB531U))
-                                     >> 27];
-#endif
+  return popcount((a&-a)-1);
 }
+

+// bitreverse a within a word of length bits.
+Int bitreverse(Int a, Int bits)
+{
+  typedef unsigned long long Bitreverse(unsigned long long a);
+  static Bitreverse *B[]={bitreverse8,bitreverse16,bitreverse24,bitreverse32,
+                     bitreverse40,bitreverse48,bitreverse56,bitreverse64};
+  int maxbits=intbits()-1; // Drop sign bit
+#if Int_MAX2 >= 0x7fffffffffffffffLL
+  --maxbits;               // Drop extra bit for reserved values
+#endif  
+  if(bits <= 0 || bits > maxbits || a < 0 ||
+     (unsigned long long) a >= (1ULL << bits))
+    return -1;
+  unsigned int bytes=(bits+7)/8;
+  return B[bytes-1]((unsigned long long) a) >> (8*bytes-bits);
+}

Modified: trunk/Build/source/utils/asymptote/runstring.cc
===================================================================
--- trunk/Build/source/utils/asymptote/runstring.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runstring.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -376,16 +376,17 @@
 }
 
 #line 259 "runstring.in"
-// string format(string *format, string separator, real x,              string locale=emptystring);
+// string format(string *format, bool forcemath=false, string separator, real x,              string locale=emptystring);
 void gen_runstring12(stack *Stack)
 {
   string locale=vm::pop<string>(Stack,emptystring);
   real x=vm::pop<real>(Stack);
   string separator=vm::pop<string>(Stack);
+  bool forcemath=vm::pop<bool>(Stack,false);
   string * format=vm::pop<string *>(Stack);
 #line 261 "runstring.in"
   bool tex=getSetting<string>("tex") != "none";
-  bool texify=false;
+  bool texify=forcemath;
   ostringstream out;
   
   const char *p0=format->c_str();
@@ -637,7 +638,7 @@
 #line 205 "runstring.in"
   addFunc(ve, run::gen_runstring11, primString() , SYM(format), formal(primString(), SYM(format), false, false), formal(primInt(), SYM(x), false, false), formal(primString() , SYM(locale), true, false));
 #line 259 "runstring.in"
-  addFunc(ve, run::gen_runstring12, primString() , SYM(format), formal(primString(), SYM(format), false, false), formal(primString() , SYM(separator), false, false), formal(primReal(), SYM(x), false, false), formal(primString() , SYM(locale), true, false));
+  addFunc(ve, run::gen_runstring12, primString() , SYM(format), formal(primString(), SYM(format), false, false), formal(primBoolean(), SYM(forcemath), true, false), formal(primString() , SYM(separator), false, false), formal(primReal(), SYM(x), false, false), formal(primString() , SYM(locale), true, false));
 #line 386 "runstring.in"
   addFunc(ve, run::gen_runstring13, primInt(), SYM(hex), formal(primString() , SYM(s), false, false));
 #line 397 "runstring.in"

Modified: trunk/Build/source/utils/asymptote/runstring.in
===================================================================
--- trunk/Build/source/utils/asymptote/runstring.in	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/runstring.in	2018-04-03 22:35:04 UTC (rev 47274)
@@ -256,11 +256,11 @@
   return out.str();
 }
 

-string format(string *format, string separator, real x,
+string format(string *format, bool forcemath=false, string separator, real x,
               string locale=emptystring)
 {
   bool tex=getSetting<string>("tex") != "none";
-  bool texify=false;
+  bool texify=forcemath;
   ostringstream out;
   
   const char *p0=format->c_str();

Modified: trunk/Build/source/utils/asymptote/util.cc
===================================================================
--- trunk/Build/source/utils/asymptote/util.cc	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/util.cc	2018-04-03 22:35:04 UTC (rev 47274)
@@ -5,6 +5,8 @@
  * A place for useful utility functions.
  *****/
 
+#define _POSIX_C_SOURCE 200809L
+
 #include <cassert>
 #include <iostream>
 #include <cstdio>
@@ -184,7 +186,7 @@
 {
   return buildname(filename,suffix,"_");
 }
-  
+
 sighandler_t Signal(int signum, sighandler_t handler)
 {
   struct sigaction action,oldaction;

Modified: trunk/Build/source/utils/asymptote/util.h
===================================================================
--- trunk/Build/source/utils/asymptote/util.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/util.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -88,8 +88,7 @@
            int *pid=NULL);
 
 #if defined(__DECCXX_LIBCXX_RH70)
-extern "C" int kill(pid_t pid, Int sig) throw();
-extern "C" char *strsignal(Int sig);
+extern "C" char *strsignal(int sig);
 extern "C" double asinh(double x);
 extern "C" double acosh(double x);
 extern "C" double atanh(double x);
@@ -101,12 +100,14 @@
 extern "C" double hypot(double x, double y) throw();
 extern "C" double jn(Int n, double x);
 extern "C" double yn(Int n, double x);
+extern "C" int isnan(double);
 #endif
 
 
 #if defined(__DECCXX_LIBCXX_RH70) || defined(__CYGWIN__)
+extern "C" int usleep(int);
+extern "C" int kill(pid_t pid, int sig) throw();
 extern "C" int snprintf(char *str, size_t size, const char *format,...);
-extern "C" int isnan(double);
 #include <stdio.h>
 extern "C" FILE *fdopen(int fd, const char *mode);
 extern "C" int fileno(FILE *);

Modified: trunk/Build/source/utils/asymptote/xstream.h
===================================================================
--- trunk/Build/source/utils/asymptote/xstream.h	2018-04-03 22:14:30 UTC (rev 47273)
+++ trunk/Build/source/utils/asymptote/xstream.h	2018-04-03 22:35:04 UTC (rev 47274)
@@ -32,10 +32,13 @@
 #define u_quad_t unsigned long long
   
 #ifdef __CYGWIN__  
+#include <sys/select.h>
+#define u_char unsigned char
+#define u_int unsigned int
+#define u_short unsigned short
+#define u_long unsigned long
 extern "C" int fseeko(FILE *, off_t, int);
 extern "C" off_t ftello(FILE *);
-#define xdr_longlong_t xdr_int64_t
-#define xdr_u_longlong_t xdr_uint64_t
 #endif  
 
 #ifdef _POSIX_SOURCE



More information about the tex-live-commits mailing list